专栏文章

题解: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 个月前
查看原文

思路

简单交互题。
首先确定 aabb 的大小关系。询问 (0,0)(0,0) 即可。
由于题目要求 6262 次,而 a,ba,b 至于为 2302^{30},所以对于其每一位可询问 22 次,加上一开始判断大小和输出答案的 22 次,共 6262 次。卡的非常死。
我们对于每个二进制位做两次询问来判断 aabb 有没有这一位。通过返回结果来判断。考虑分类讨论即可。

代码

我通常不给代码。
CPP
#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 条评论,欢迎与作者交流。

正在加载评论...