2024.11.17 Codeforces Round 988 (Div. 3)
Solved:7/7
Penalty:184
Rank(trusted):2
Rank(all):21
好水的 Div.3。。。甚至 G 是原题绷不住了()
A. Twice
题意:给一个序列,相同的两个数可以配对消除,求最多消除的次数。
直接开桶。
#include<bits/stdc++.h> using namespace std; void solve(){ int n; cin>>n; vector<int> c(n+1); int ans=0; for(int i=0,x;i<n;++i){ cin>>x,++c[x]; if(c[x]==2)c[x]=0,++ans; } cout<<ans<<'\n'; } int main(){ ios::sync_with_stdio(0);cin.tie(0); int T; cin>>T; while(T--)solve(); }
B. Intercepted Inputs
题意:给一个
枚举
#include<bits/stdc++.h> using namespace std; void solve(){ int k; cin>>k; vector<int> c(k+1); for(int i=0,x;i<k;++i)cin>>x,++c[x]; int m=k-2; for(int i=1;i*i<=m;++i)if(!(m%i)){ if(i!=m/i){ if(c[i]&&c[m/i]){ cout<<i<<' '<<m/i<<'\n'; return; } } else{ if(c[i]>=2){ cout<<i<<' '<<i<<'\n'; return; } } } } int main(){ ios::sync_with_stdio(0);cin.tie(0); int T; cin>>T; while(T--)solve(); }
C. Superultra's Favorite Permutation
题意:构造一个长度为
注意到偶数必为合数,而我们可以先排偶数再排奇数使只有一个位置相邻奇偶性不同(另一方面,至少有一个位置相邻奇偶性不同)。
而最小的合数为
#include<bits/stdc++.h> using namespace std; void solve(){ int n; cin>>n; if(n<=4)cout<<"-1\n"; else{ for(int i=n/2*2;i>=6;i-=2)cout<<i<<' '; cout<<"2 4 5 1 3 "; for(int i=7;i<=n;i+=2)cout<<i<<' '; cout<<'\n'; } } int main(){ ios::sync_with_stdio(0);cin.tie(0); int T; cin>>T; while(T--)solve(); }
D. Sharky Surfing
题意:在数轴上从
按加速器的位置枚举,用大根堆维护可以捡的加速器。遇到一个区间就用加速器直到
#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int,int> pii; #define all(x) (x).begin(),(x).end() void solve(){ int n,m,L; cin>>n>>m>>L; vector<int> l(n),r(n); vector<pii> a(m); for(int i=0;i<n;++i)cin>>l[i]>>r[i]; for(int i=0;i<m;++i)cin>>a[i].first>>a[i].second; sort(all(a)); ++m,a.push_back({L,0}); priority_queue<int> pq; int res=0; ll sum=1; for(int i=0,j=0;i<m;++i){ while(j<n&&a[i].first>=l[j]){ while(i<m&&a[i].first<=r[j])++i; while(!pq.empty()&&sum<r[j]-l[j]+2)sum+=pq.top(),pq.pop(),++res; if(sum<r[j]-l[j]+2){cout<<"-1\n";return;} ++j; } pq.push(a[i].second); } cout<<res<<'\n'; } int main(){ ios::sync_with_stdio(0);cin.tie(0); int T; cin>>T; while(T--)solve(); }
E. Kachina's Favorite Binary String
题意:交互题。你要猜一个长度为 01
。最多询问
依次询问
设第一个非
#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int,int> pii; #define all(x) (x).begin(),(x).end() int qry(int l,int r){ cout<<"? "<<l<<' '<<r<<endl; int x; cin>>x; return x; } void solve(){ int n; cin>>n; int pos=0,now=0,z=0; string ans; ans.resize(n); for(int i=2;i<=n;++i){ int nxt=qry(1,i); if(nxt>now){ ans[i-1]='1'; if(!pos)pos=i,z=nxt; } else ans[i-1]='0'; now=nxt; } if(!pos){cout<<"! IMPOSSIBLE"<<endl;return;} for(int i=1;i<=pos-z-1;++i)ans[i-1]='1'; for(int i=pos-z;i<=pos-1;++i)ans[i-1]='0'; cout<<"! "<<ans<<endl; } int main(){ int T; cin>>T; while(T--)solve(); }
F. Ardent Flames
题意:有
二分答案,设扔了
问题转化为给
#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int,int> pii; #define all(x) (x).begin(),(x).end() void solve(){ int n,m,k; cin>>n>>m>>k; vector<int> h(n),x(n); for(int i=0;i<n;++i)cin>>h[i]; for(int i=0;i<n;++i)cin>>x[i]; auto chk=[&](int w)->bool { vector<int> t(n),buc; for(int i=0;i<n;++i){ t[i]=(h[i]+w-1)/w; if(t[i]<=m){ buc.push_back(x[i]-m+t[i]); buc.push_back(x[i]+m-t[i]+1); } } sort(all(buc)); buc.resize(unique(all(buc))-buc.begin()); vector<int> c(buc.size()); for(int i=0;i<n;++i){ if(t[i]<=m){ int l=lower_bound(all(buc),x[i]-m+t[i])-buc.begin(); int r=lower_bound(all(buc),x[i]+m-t[i]+1)-buc.begin(); ++c[l],--c[r]; } } for(int i=1;i<buc.size();++i)c[i]+=c[i-1]; for(int i=0;i<buc.size();++i)if(c[i]>=k)return 1; return 0; }; int l=1,r=1e9,ans=-1; while(l<=r){ int mid=(l+r)>>1; if(chk(mid))ans=mid,r=mid-1; else l=mid+1; } cout<<ans<<'\n'; } int main(){ ios::sync_with_stdio(0);cin.tie(0); int T; cin>>T; while(T--)solve(); }
G. Natlan Exploring
原题:这场的 J
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!