题目

题意:

  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(交互题 异或)的更多相关文章

  1. 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 ...

  2. 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/ ...

  3. 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 题意: 给出一个 ...

  4. Codeforces Round #525 (Div. 2) E. Ehab and a component choosing problem 数学

    题意:给出树 求最大的sigma(a)/k k是选取的联通快个数   联通快不相交 思路: 这题和1个序列求最大的连续a 的平均值  这里先要满足最大平均值  而首先要满足最大  也就是一个数的时候可 ...

  5. 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 题意: 给出一颗点有权值的树 ...

  6. Codeforces Round #525 (Div. 2)B. Ehab and subtraction

    B. Ehab and subtraction 题目链接:https://codeforc.es/contest/1088/problem/B 题意: 给出n个数,给出k次操作,然后每次操作把所有数减 ...

  7. 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,找 ...

  8. 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任选 ...

  9. Codeforces Round #525 (Div. 2) C. Ehab and a 2-operation task

    传送门 https://www.cnblogs.com/violet-acmer/p/10068786.html 题意: 给定一个长度为 n 的数组a[ ],并且有两种操作: ①将前 i 个数全都加上 ...

随机推荐

  1. MSP430FR6972驱动模块模组调试

    1. 说是会进入晶振的中断 #pragma vector=UNMI_VECTOR 2. 打了断点没进入,猜测是串口被世龙修改后,串口波特率不对,重新改回原来的,AT+NATSPEED?一直发送这个命令 ...

  2. Tomcat教程(转)

    转载链接: https://www.cnblogs.com/jingmoxukong/p/8258837.html?utm_source=gold_browser_extension 简介 Tomca ...

  3. vue 跨域简记

    0.服务端设置 app.use(function(req, res, next){ //设置跨域访问 res.header('Access-Control-Allow-Origin', '*'); r ...

  4. 关于Form、ModelForm的一些操作(持续更新)

    1.前端循环:后端传到前端的form是可以循环的,以此获得想要展示的元素 <form method="post" class="form-horizontal&qu ...

  5. ubuntu 安装 svn

    sudo apt-get install subversion

  6. sshd_config参数说明

    SSHD_CONFIG(5) OpenBSD Programmer's Manual SSHD_CONFIG(5)名称 sshd_config - OpenSSH SSH 服务器守护进程配置文件大纲 ...

  7. phaser三个学生做题目

    3个学生一起参加考试,一共有三道题,要求所有学生到齐才能开始考试,全部同学都做完第一题,学生才能继续做第二题,全部学生做完了第二题,才能做第三题,所有学生都做完的第三题,考试才结束 public cl ...

  8. 15-16 ICPC europe J Saint John Festival (graham扫描法+旋转卡壳)

    题意:给n个大点,m个小点$(n<=1e5,m<=5e5),问有多少个小点,存在3个大点,使小点在三个大点组成的三角形内. 解题思路: 首先,易证,若该小点在某三大点行成的三角形内,则该小 ...

  9. ~postman基础断言方法

    postman官方文档:https://learning.getpostman.com/docs/postman/scripts/test_examples/ 断言1:检查响应主体是否包含字符串 // ...

  10. Python re模块前的正则表达式常用语法小总结

    一.正则表达式: (1).正则表达式是干什么的  正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串.将匹配的子串替换或 ...