2024.12.20 Codeforces Round 994 (Div. 2)
Solved: 4/6
Rank: 268
EF 都是神题,跑了
A. MEX Destruction
题意:给一个序列,每次操作可以将一个连续子序列改为它的mex,求最少几次操作可将其变为全0。
注意到对整个序列操作 2 次它就会变成 0。因此答案不超过 2。
如果一开始就是全 0,答案是 0;
如果 0 全都在开头和结尾,答案是 1。
#include<bits/stdc++.h> using namespace std; #define all(x) (x).begin(),(x).end() int solve(){ int n; cin>>n; vector<int> a(n); for(int& x:a)cin>>x; if(*max_element(all(a))==0)return 0; int p=-1,q=-1; for(int i=0;i<n;++i)if(a[i]>0){p=i;break;} for(int i=n-1;i>=0;--i)if(a[i]>0){q=i;break;} for(int i=p;i<=q;++i)if(a[i]==0)return 2; return 1; } int main(){ ios::sync_with_stdio(0);cin.tie(0); int T; cin>>T; while(T--)cout<<solve()<<'\n'; }
B. pspspsps
题意:给一个仅包含 ps.
三个字符的字符串。求一个排列,满足
-
若第
个字符为p
,则 是 到 的排列; -
若第
个字符为s
,则 是 到 的排列。
结论:只有前 p
,或者后 s
时有解。
#include<bits/stdc++.h> using namespace std; #define all(x) (x).begin(),(x).end() bool solve(){ int n; string a; cin>>n>>a; bool fl=1; for(int i=0;i<n-1;++i){ if(a[i]=='p')fl=0; } if(fl)return 1; fl=1; for(int i=1;i<n;++i){ if(a[i]=='s')fl=0; } if(fl)return 1; return 0; } int main(){ ios::sync_with_stdio(0);cin.tie(0); int T; cin>>T; while(T--)cout<<(solve()?"YES":"NO")<<'\n'; }
C. MEX Cycle
题意:
先不考虑 0101...012
符合题意;当 0101...01
符合题意。
因为是一个环,所以顺序可以随便转。当
#include<bits/stdc++.h> using namespace std; #define all(x) (x).begin(),(x).end() void solve(){ int n,x,y; cin>>n>>x>>y,--x,--y; vector<int> a(n); if(n&1){ a[x]=2; for(int i=1;i<n;++i)a[(x+i)%n]=i&1; } else{ if((x^y)&1){ for(int i=0;i<n;++i)a[i]=i&1; } else{ a[x]=2; for(int i=1;i<n;++i)a[(x+i)%n]=i&1; } } for(int x:a)cout<<x<<' '; cout<<'\n'; } int main(){ ios::sync_with_stdio(0);cin.tie(0); int T; cin>>T; while(T--)solve(); }
D. Shift + Esc
题意:
dp,
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define all(x) (x).begin(),(x).end() const int N=205; int n,m; ll p,a[N][N],f[N][N],g[N]; void solve(){ cin>>n>>m>>p; for(int i=0;i<n;++i) for(int j=0;j<m;++j) cin>>a[i][j]; for(int i=0;i<m;++i)memset(f[i],0x3f,sizeof(ll)*m); for(int k=0;k<m;++k)f[0][k]=a[0][k]+k*p; for(int i=0;i<n;++i){ if(i){ for(int j=0;j<m;++j) for(int k=0;k<m;++k) f[j][k]=g[j]+a[i][(j+k)%m]+k*p; } for(int j=1;j<m;++j) for(int k=0;k<m;++k) f[j][k]=min(f[j][k],f[j-1][k]+a[i][(j+k)%m]); memset(g,0x3f,sizeof(ll)*m); for(int j=0;j<m;++j) for(int k=0;k<m;++k) g[j]=min(g[j],f[j][k]); } cout<<g[m-1]<<'\n'; } int main(){ ios::sync_with_stdio(0);cin.tie(0); int T; cin>>T; while(T--)solve(); }
我愿意追随你的轨迹,不远万里,不问归期
分类:
CF
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效