Codeforces Round 945 (Div. 2)
Codeforces Round 945 (Div. 2)
A. Chess For Three 签到
题意:
三个人两两下棋,胜者得
求最多平局个数,如果得分不合法输出
思路:
考虑两种情况,
代码:
#include<bits/stdc++.h>
using namespace std;
#define ff first
#define ss second
#define pb push_back
#define all(u) u.begin(), u.end()
#define endl '\n'
#define debug(x) cout<<#x<<":"<<x<<endl;
typedef pair<int, int> PII;
typedef long long LL;
const int inf = 0x3f3f3f3f;
const int N = 1e5 + 10, M = 105;
const int mod = 1e9 + 7;
const int cases = 1;
void Showball(){
int a,b,c;
cin>>a>>b>>c;
int t=a+b-c;
if(t&1) return cout<<"-1\n",void();
if(t<0) cout<<a+b<<endl;
else cout<<c+(a+b-c)/2<<endl;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int T=1;
if(cases) cin>>T;
while(T--)
Showball();
return 0;
}
B. Cat, Fox and the Lonely Array 拆位+贪心
题意:
给你
思路:
位运算题目,拆位,这样整数的取值只有
对于
对于
最长连续
代码:
void Showball(){
int n;
cin>>n;
vector<int> a(n);
for(int i=0;i<n;i++) cin>>a[i];
int ans=1;
for(int i=0;i<=20;i++){
for(int j=0;j<n;j++){
int cnt=1,k=j;
while(k<n&&!(a[k]>>i&1)) cnt++,k++;
if(cnt==n+1) cnt=1;
ans=max(ans,cnt);
if(j==k) continue;
j=k-1;
}
}
cout<<ans<<endl;
}
C. Cat, Fox and Double Maximum
题意:
给你一个长度为
若满足
思路:
为了使得局部最大值的数量最多,那么局部最大值一定全部排在奇数位或者偶数位。
如果
这里假设
这样就可以保证奇数位的所有数都是小于等于
接着将
这样就可以保证偶数位的所有数都是大于
如果
代码:
void Showball(){
int n;
cin>>n;
vector<int> a(n+1);
vector<PII> odd,even;
int ok=0;
for(int i=1;i<=n;i++){
cin>>a[i];
if(a[i]==1) ok=i&1;
if(i&1) odd.pb({a[i],i});
else even.pb({a[i],i});
}
sort(all(odd));
sort(all(even));
vector<int> ans(n+1);
int t=(ok?n/2:n);
for(auto [v,p]:odd) ans[p]=t--;
t=(ok?n:n/2);
for(auto [v,p]:even) ans[p]=t--;
for(int i=1;i<=n;i++) cout<<ans[i]<<" \n"[i==n];
}
D. Cat, Fox and Maximum Array Split 交互题
题意:
给你
你可以进行
若不存在这样的
通过询问后,你需要找到或者确定不存在这样的
思路:
考虑答案只可能为最大值的倍数,那么我们就可以询问
代码:
void Showball(){
int n,k;
cin>>n>>k;
auto ask=[&](int l,int x){
cout<<"? "<<l<<" "<<x<<endl;
int ret;
cin>>ret;
return ret;
};
int maxn=0;
for(int i=1;i<=n;i++){
if(ask(1,i*n)==n){
maxn=i;
break;
}
}
int ans=-1;
for(int i=1;i<=n/k;i++){
int m=i*maxn;
int cnt=0,r=1;
while(r<=n){
r=ask(r,m);
if(r==n+1){
cnt=0;
break;
}
r++;
cnt++;
if(cnt==k&&r!=n+1){
cnt=0;
break;
}
}
if(cnt==k) ans=max(ans,m);
}
cout<<"! "<<ans<<endl;
int t;
cin>>t;
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek智能编程
· 精选4款基于.NET开源、功能强大的通讯调试工具
· [翻译] 为什么 Tracebit 用 C# 开发
· 腾讯ima接入deepseek-r1,借用别人脑子用用成真了~
· DeepSeek崛起:程序员“饭碗”被抢,还是职业进化新起点?