专栏文章
题解:CF1088D Ehab and another another xor problem
CF1088D题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @min2pfpc
- 此快照首次捕获于
- 2025/12/01 19:36 3 个月前
- 此快照最后确认于
- 2025/12/01 19:36 3 个月前
思路
简单交互题。
首先确定 和 的大小关系。询问 即可。
由于题目要求 次,而 至于为 ,所以对于其每一位可询问 次,加上一开始判断大小和输出答案的 次,共 次。卡的非常死。
我们对于每个二进制位做两次询问来判断 和 有没有这一位。通过返回结果来判断。考虑分类讨论即可。
代码
#include<bits/stdc++.h>
using namespace std;
#define f fflush(stdout)
void ask(int x,int y){printf("? %d %d\n",x,y);f;}
void answer(int x,int y){printf("! %d %d\n",x,y);f;}
signed main(){
ask(0,0);
int op,ansa=0,ansb=0;scanf("%d",&op);
for(int i=29;i>=0;i--){
int k=(1<<i),x,y;
ask(ansa^k,ansb);scanf("%d",&x);
ask(ansa,ansb^k);scanf("%d",&y);
if(x==y){
if(op==1) ansa^=k;
else if(op==-1) ansb^=k;
op=x;
}
else if(x==-1) ansa^=k,ansb^=k;
}answer(ansa,ansb);
return 0;
}
撒花!
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...