『模拟赛』csp-s模拟赛6

news/2024/9/28 20:33:43

『模拟赛』csp-s模拟赛6

挂分日寄:0+20+0+0

喵喵赛时对拍拍了10000个点都没拍出来,赛后一下就拍出错来了,我谔谔。

T1

DP喵~

首先 sort 一遍方便处理 其实转移时加一个 abs 取绝对值就可,纯纯多此一举

\(f[i,j,1/0]\) 为前 \(i\) 个数中选 \(j\) 个的最小值

若选当前这个数,则 \(f[i,j,1]=f[i-1,j-1,0]+a[i]-a[i-1]\)

若不选当前这个数,则 \(f[i,j,0]=min(f[i-1,j,0],f[i-1,j,1]\)

考虑到可以用滚动数组滚调一维。

优化一下即可。

没了。

int n,m;
int f[2][N][2],a[N];signed main(){freopen("match.in","r",stdin);freopen("match.out","w",stdout);n=rd,m=rd;for(int i=1;i<=n;i++) a[i]=rd;sort(a+1,a+1+n);mst(f,0x3f);for(int i=2;i<=n;i++){int g=i&1;for(int j=0;j<=m;j++)f[g][j][0]=f[g][j][1]=inf;f[g^1][0][0]=0;for(int j=1;j<=m;j++){f[g][j][0]=min(f[g^1][j][0],f[g^1][j][1]);f[g][j][1]=f[g^1][j-1][0]+a[i]-a[i-1];}}printf("%lld",min(f[n&1][m][1],f[n&1][m][0]));return Elaina;
}

赛后听GGrun可反悔贪心的思路也不错。懒得打。遂咕咕。

T2

赛时近300行巨大贪心分讨。

总的来说就是手模几组数据发现最优解也就只有那几种操作。

比如说:把第一个数删掉;如果数组中有 \(1\) 那么删去 \(1\)...等等。

接下来码就完事了。

复杂度是 \(O(nq \times 常数)\)

Code(不建议点开) int n,m,len; int a[N]; int now[N],ans[N]; map vis;

bool cmp(int *x,int *y){//x<y?
// for(int i=1;i<=n;i++){
// cout<<x[i]<<' ';
// }
// cout<<endl;
for(int i=1;i<=n;i++){
if(x[i]<y[i]) return 1;
else if(x[i]>y[i]) return 0;
else continue;
}
return 1;
}

void work(){
// n=rd;
cin>>n;

vis.clear();
fill(ans,ans+1+n,inf);bool _0=1;int fst=0;
for(int i=1;i<=n;i++){cin>>a[i];

// a[i]=rd,
_0=_0&&(a[i]!=0),vis[a[i]]=i;
if(!fst && a[i]==0) fst=i;
}

if(!fst){for(int i=1;i<n;i++){cout<<i<<' ';}cout<<'\n';return ;
}int pre;

/---------------------------------------------/
len=0;
pre=vis[a[1]];
vis[a[1]]=0;
for(int i=2,cnt=0;i<=n;i++){
if(a[i]!=0){
now[++len]=a[i];
}else{
++cnt;
while(vis[cnt]) ++cnt;
now[++len]=cnt;
}
}

if(cmp(now,ans)){memcpy(ans,now,sizeof(int) *(n+1));
}vis[a[1]]=pre;

/---------------------------------------------/
len=0;

int mx=0,pos;
for(int i=1;i<=n;i++){if(a[i]>mx) mx=a[i],pos=i;else if(a[i]==mx) continue;else break;
}pre=vis[a[pos]];
vis[a[pos]]=0;for(int i=1,cnt=0;i<=n;i++){if(i==pos) continue;if(a[i]!=0){now[++len]=a[i];}else{++cnt;while(vis[cnt]) ++cnt;now[++len]=cnt;}
}

// for(int i=1;i<n;i++){
// cout<<now[i]<<' ';
// }
// cout<<endl;

if(cmp(now,ans)){memcpy(ans,now,sizeof(int) *(n+1));
}vis[a[pos]]=pre;

/---------------------------------------------/
len=0,mx=0;
pos=1;
for(int i=1;i<=n;i++){
if(a[i]i||a[i]0){
if(vis[i]&&vis[i]!=i){
pos=vis[i];
break;
}
}else break;
}

pre=vis[a[pos]];
vis[a[pos]]=0;for(int i=1,cnt=0;i<=n;i++){if(i==pos) continue;if(a[i]!=0){now[++len]=a[i];}else{++cnt;while(vis[cnt]) ++cnt;now[++len]=cnt;}
}if(cmp(now,ans)){memcpy(ans,now,sizeof(int) *(n+1));
}vis[a[pos]]=pre;

/---------------------------------------------/
len=0,mx=0,pos=0;
for(int i=1;i<=n;i++){
if(a[i]i||a[i]0) continue;
else if(a[i]>mx) mx=a[i],pos=i;
else break;
}

if(!pos){for(int i=1;i<n;i++) now[i]=i;if(cmp(now,ans)){memcpy(ans,now,sizeof(int) *(n+1));}
}pre=vis[a[pos]];
vis[a[pos]]=0;for(int i=1,cnt=0;i<=n;i++){if(i==pos) continue;if(a[i]!=0){now[++len]=a[i];}else{++cnt;while(vis[cnt]) ++cnt;now[++len]=cnt;}
}if(cmp(now,ans)){memcpy(ans,now,sizeof(int) *(n+1));
}vis[a[pos]]=pre;

/---------------------------------------------/
len=0;
if(vis[1]){
int mn=1,fnd=0;

	while(a[1]>mn){if(!vis[mn]){fnd=1;break;}++mn;}if(fnd){int mx=0;for(int i=1;i<=n;i++){if(!a[i]){break;}if(a[i]>mx){mx=a[i];pos=i;}}vis[a[pos]]=0;for(int i=1,cnt=0;i<=n;i++){if(i==pos) continue;if(a[i]!=0){now[++len]=a[i];}else{++cnt;while(vis[cnt]) ++cnt;now[++len]=cnt;}}}else{pos=vis[1];vis[1]=0;for(int i=1,cnt=0;i<=n;i++){if(i==pos) continue;if(a[i]!=0){now[++len]=a[i];}else{++cnt;while(vis[cnt]) ++cnt;now[++len]=cnt;}}}
}else{if(fst)vis[a[1]]=0;a[fst]=1;vis[1]=fst;for(int i=1,cnt=0;i<=n;i++){if(i==fst) continue;if(a[i]!=0){now[++len]=a[i];}else{++cnt;while(vis[cnt]) ++cnt;now[++len]=cnt;}}
}if(cmp(now,ans)){memcpy(ans,now,sizeof(int) *(n+1));
}for(int i=1;i<n;i++){cout<<ans[i]<<' ';

// printf("%lld ",ans[i]);
}
cout<<'\n';
// putchar('\n');
}

signed main(){
// freopen("repeat.in","r",stdin);
// freopen("repeat.out","w",stdout);

ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);

// int T=rd;
int T;
cin>>T;

while(T--)work();return Elaina;

}

T3

考虑到样例有个都是 \(1\),所以我们直接 cout<<1 喜提 15pts

贴个官方题解吧,感觉挺详细的。


int n,m,sum,idx,a[N],ans[N];
int fa[N],cnt[N],son[N];
set<int> st[N];
struct EDGE{int frm,to;
}e[N];int find(int x){return x==fa[x]?fa[x]:fa[x]=find(fa[x]);
}void del(int x){if(st[x].size()<=2 && !cnt[x]){--sum;int num=0;for(auto to:st[x])son[++num]=to;st[x].clear();for(int i=1;i<=num;i++){for(int j=1;j<=num;j++){if(i==j) continue;st[son[i]].insert(son[j]);}st[son[i]].erase(x);}for(int i=1;i<=num;i++)del(son[i]);}
}signed main(){
//	freopen("tree.in","r",stdin);
//	freopen("tree.out","w",stdout);ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin>>n;for(int i=1;i<=n;i++) fa[i]=i;for(int i=1,x,y,z;i<n;i++){cin>>x>>y>>z;if(!z){int a=find(x),b=find(y);if(a>b) swap(a,b);fa[b]=a;}elsee[++idx].frm=x,e[idx].to=y;}for(int i=1;i<n;i++)st[find(e[i].frm)].insert(find(e[i].to)),st[fa[e[i].to]].insert(fa[e[i].frm]);for(int i=1;i<=n;i++){cin>>a[i];a[i]=find(a[i]);++cnt[a[i]];}for(int i=n;i>=1;i--){ans[i]=(sum==0),--cnt[a[i]];if(!cnt[a[i]]) ++sum,del(a[i]);}for(int i=1;i<=n;i++)cout<<ans[i];return Elaina;
}

T4

考虑到样例有几个都是 \(1\),所以我们直接 cout<<1 喜提 10pts

诶 这句话怎么感觉在哪见过

正解奇妙 \(O(n^6log(n))\) DP。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/65907.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

树莓派pico rp2040 使用rust 在ssd1306上显示中文信息

使用u8g2-font + embedded-graphics ,在rp2040 pico上用 ssd1306输出中文信息在rp2040上用DHT22 + ssd1306显示温度信息,用 embedded-graphics库和ssd1306库来实现。但实现的效果不是很理想,无法在ssd1306屏幕上显示中文。为了解决这个问题,在github和crates.io上面找了几天…

typeScript 的第一步---安装

Node.js/浏览器,只认识JS代码,不认识TS代码,需要将TS代码转化为JS代码,然后才能运行。 安装命令:npm i -g typescript 或者 yarn global add typescript 注意:Mac电脑安装全局包时,需要通知添加sudo获取权限。sudo npm i -g typescript 验证安装是否成功:tsc -v 查…

为什么用 AWS CLI?因为我懒得点鼠标!

在这篇博客中,我们一起深入探索 AWS CLI 的世界,从零开始,逐步构建在云端的家园。将介绍 AWS CLI 的基本功能和使用场景,如何创建 IAM 用户、VPC、子网、安全组、EC2 实例等,甚至还会搭建一个应用负载均衡器(ALB)。无论你是初学者还是有一定基础的用户,都能通过本指南掌…

妙用编辑器:使用Notepad--正则表达式从命令结果报文快速生成新命令

应用场景 日常生活中有些维护场景,比如检查设备状态,执行查询命令后,得到精简结果报文,如果要更深入的检查状态,可能还要执行其他命令,逐个对象进行查询,这里涉及到快速从报文生成查询指令的功能。 比如有如下一个从LST 命令查询出来的报文,需要快速的生成DSP命令,逐个…

JavaScript深拷贝与浅拷贝

由于对象采用的是引用赋值。所以直接用“=”,修改属性的时候也会将原来的变量改变掉。 因此,就有了浅拷贝与深拷贝 用{...obj}和object.assign表示浅拷贝,其只拷贝外围对象的一层,而不会拷贝多层。 方法二:使用Object.assign 深拷贝的实现 其一是通过递归实现拷贝。其二lo…

bs4解析并提取人民网新闻标题数据

1. 目标url:http://www.people.com.cn/ 2. 查找标题信息所在标签:标题的文本信息在<a>标签中,且<a>标签有target属性,属性值为"_blank"。<a>标签有父辈标签<div>和<h3>。 当需要根据元素的层级关系、属性组合等复杂条件定位时;文…

volatile关键字最全原理剖析

介绍 volatile是轻量级的同步机制,volatile可以用来解决可见性和有序性问题,但不保证原子性。 volatile的作用:保证了不同线程对共享变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。 禁止进行指令重排序。底层原理 内存屏障 vol…

2024.9.28 代码源模拟赛

省流:45+20+5+0=70省流:\(45+20+5+0=70\) 简称:唐诗在此膜拜 \(klz\) \(Heldivis\) \(Sorato\) \(czl\) \(Ech0\_7\) yxans lihe_qwq 大佬 T1 先看的 T1 ,想了一个拓排(其实是看错题了),然后过了第一个样例,然后咋调都过不去,就去码暴力了。 过了大概 10min 发现看错题…