Codeforces Round #525 (Div. 2) D. Ehab and another another xor problem(交互题 异或)
题意:
0≤a,b<2^30, 最多猜62次。
交互题,题目设定好a,b的值,要你去猜。要你通过输入 c d :
如果 a^c < b^d ,会反馈 -1 ;
如果 a^c = b^d ,会反馈 0 ;
如果 a^c > b^d ,会反馈 1 ;
每次猜前面都用 ? 表示, 最后一行用!表示已经知道a b的值。
思路:
不会,然后去找别人博客学。 大致思路就是:a b都是二进制来表示,从高到低位 把a和b的每一位都判断出来。
判断a b同一位是否相等:
1. 如果相等,判断这一位是0 还是 1 ,
判断方法是:printf("? %d %d\n", a|(1<<i),b);
scanf("%d",&now); now是反馈
如果now是1,则a b 的这一位都是1(a=a|(1<<i), b=b|(1<<i) )
2. 如果不等,判断 a这一位是1 && b这一位是0 还是 a这一位是0 && b这一位是1 ,
判断方法是:见代码
步骤:
一开始通过c=0 d=0 判断a b的相对大小:
1. 如果a==b,说明a和b的所有二进制位都是相同的,按上面的1进行解决;
2. 如果a !=b,说明a b存在某些二进制位不相同的情况,所以:
首先判断当前位是否相等,如果相等,按上面1的做法 ; 如果不相等,按上面2的做法。
再判断 当前位以后的所有位 是否全都相同,如果相同,进入此1,如果不相同,进入此2.
#include<iostream>
#include<cstdio>
#include <cctype>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<string>
#include<cmath>
#include<set>
#include<vector>
#include<stack>
#include<queue>
#include<map>
using namespace std;
#define ll long long
#define mem(a,x) memset(a,x,sizeof(a))
#define se second
#define fi first
const ll mod=1e9+;
const int INF= 0x3f3f3f3f;
const int N=1e5; int main()
{
int a=,b=,fb,now;
printf("? 0 0\n");
fflush(stdout);
scanf("%d",&fb); for(int i=;i>=;i--)
{
if(fb==)//a b 在当前i位以后的 所有都相同
{
printf("? %d %d\n",a|(<<i),b);
fflush(stdout);
scanf("%d",&now); //判断当前这位是1还是0
if(now==-) //是1
a=a|(<<i), b=b|(<<i);
}
else//a b 在当前i位以后的各位 存在不同
{
printf("? %d %d\n",a|(<<i),b|(<<i));//判断当前位是否相同
fflush(stdout);
scanf("%d",&now);
if(now==fb) //这一位的改变不影响ab之间谁大谁小,所以是相同的
{
printf("? %d %d\n",a|(<<i),b);
fflush(stdout);
scanf("%d",&now); //判断这位是1还是0
if(now==-) //是1
a=a|(<<i), b=b|(<<i);
}
else // a中的这一位和b中的这一位 不相同
{
//假设答案a为101,b为001,代码中a=0,b=0,
//所以a|(1<<2)=100,b|(1<<2)=100, 101^100=001,001^100=101,
//此时now==-1,说明a这位为1,b这位为0; //如果答案b为101,a为001,代码中a=0,b=0,
//所以a|(1<<2)=100,b|(1<<2)=100,001^100=101,101^100=001,
//此时now==1,说明a这位为0,b这位为1;
if (now==-) a |= << i;
else if(now==) b |= << i; //因为now不可能=0了 printf("? %d %d\n",a,b);
//这一位判断完毕,接着算a b在这位以后所有的是不是相同
fflush(stdout);
scanf("%d",&fb);
}
}
}
printf("! %d %d\n", a, b);
fflush(stdout);
}
Codeforces Round #525 (Div. 2) D. Ehab and another another xor problem(交互题 异或)的更多相关文章
- Codeforces Round #525 (Div. 2)D. Ehab and another another xor problem
D. Ehab and another another xor problem 题目链接:https://codeforces.com/contest/1088/problem/D Descripti ...
- Codeforces Round #525 (Div. 2) D. Ehab and another another xor problem(待完成)
参考资料: [1]:https://blog.csdn.net/weixin_43790474/article/details/84815383 [2]:http://www.cnblogs.com/ ...
- Codeforces Round #525 (Div. 2)E. Ehab and a component choosing problem
E. Ehab and a component choosing problem 题目链接:https://codeforces.com/contest/1088/problem/E 题意: 给出一个 ...
- Codeforces Round #525 (Div. 2) E. Ehab and a component choosing problem 数学
题意:给出树 求最大的sigma(a)/k k是选取的联通快个数 联通快不相交 思路: 这题和1个序列求最大的连续a 的平均值 这里先要满足最大平均值 而首先要满足最大 也就是一个数的时候可 ...
- Codeforces Round #525 (Div. 2) F. Ehab and a weird weight formula
F. Ehab and a weird weight formula 题目链接:https://codeforces.com/contest/1088/problem/F 题意: 给出一颗点有权值的树 ...
- Codeforces Round #525 (Div. 2)B. Ehab and subtraction
B. Ehab and subtraction 题目链接:https://codeforc.es/contest/1088/problem/B 题意: 给出n个数,给出k次操作,然后每次操作把所有数减 ...
- Codeforces Round #525 (Div. 2)A. Ehab and another construction problem
A. Ehab and another construction problem 题目链接:https://codeforc.es/contest/1088/problem/A 题意: 给出一个x,找 ...
- Codeforces Round #525 (Div. 2) C. Ehab and a 2-operation task 数学 mod运算的性质
C. Ehab and a 2-operation task 数学 mod运算的性质 题意: 有两种对前缀的运算 1.对前缀每一个\(a +x\) 2.对前缀每一个\(a\mod(x)\) 其中x任选 ...
- Codeforces Round #525 (Div. 2) C. Ehab and a 2-operation task
传送门 https://www.cnblogs.com/violet-acmer/p/10068786.html 题意: 给定一个长度为 n 的数组a[ ],并且有两种操作: ①将前 i 个数全都加上 ...
随机推荐
- MSP430FR6972驱动模块模组调试
1. 说是会进入晶振的中断 #pragma vector=UNMI_VECTOR 2. 打了断点没进入,猜测是串口被世龙修改后,串口波特率不对,重新改回原来的,AT+NATSPEED?一直发送这个命令 ...
- Tomcat教程(转)
转载链接: https://www.cnblogs.com/jingmoxukong/p/8258837.html?utm_source=gold_browser_extension 简介 Tomca ...
- vue 跨域简记
0.服务端设置 app.use(function(req, res, next){ //设置跨域访问 res.header('Access-Control-Allow-Origin', '*'); r ...
- 关于Form、ModelForm的一些操作(持续更新)
1.前端循环:后端传到前端的form是可以循环的,以此获得想要展示的元素 <form method="post" class="form-horizontal&qu ...
- ubuntu 安装 svn
sudo apt-get install subversion
- sshd_config参数说明
SSHD_CONFIG(5) OpenBSD Programmer's Manual SSHD_CONFIG(5)名称 sshd_config - OpenSSH SSH 服务器守护进程配置文件大纲 ...
- phaser三个学生做题目
3个学生一起参加考试,一共有三道题,要求所有学生到齐才能开始考试,全部同学都做完第一题,学生才能继续做第二题,全部学生做完了第二题,才能做第三题,所有学生都做完的第三题,考试才结束 public cl ...
- 15-16 ICPC europe J Saint John Festival (graham扫描法+旋转卡壳)
题意:给n个大点,m个小点$(n<=1e5,m<=5e5),问有多少个小点,存在3个大点,使小点在三个大点组成的三角形内. 解题思路: 首先,易证,若该小点在某三大点行成的三角形内,则该小 ...
- ~postman基础断言方法
postman官方文档:https://learning.getpostman.com/docs/postman/scripts/test_examples/ 断言1:检查响应主体是否包含字符串 // ...
- Python re模块前的正则表达式常用语法小总结
一.正则表达式: (1).正则表达式是干什么的 正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串.将匹配的子串替换或 ...