#CF2078E. 寻找 OR 和

寻找 OR 和

E. 寻找 OR 和

时间与内存限制

  • 时间限制:22
  • 内存限制:256256 MB

题目类型

交互题

题意翻译

有两个隐藏的非负整数 xxyy,满足 0x,y<2300\le x,y<2^{30}。 你可以进行不超过 22以下形式的询问:

选择一个非负整数 nn0n<2300\le n<2^{30}),评测机会返回:

(nx)+(ny)(n\mid x)+(n\mid y)

其中 \mid 表示按位或运算。

询问结束后,评测机会给你另一个非负整数 mm0m<2300\le m<2^{30})。 你必须正确回答出:

(mx)+(my)(m\mid x)+(m\mid y)

交互格式

每个测试点包含多组数据。 第一行一个整数 tt1t1041\le t\le 10^4),表示测试用例组数。

每组数据内:

  • 隐藏的 x,yx,y固定不变的,交互过程中不会改变。
  • 每次询问:输出一个整数 nn 并换行,然后刷新缓冲区。
  • 你会读到一个整数,表示 (nx)+(ny)(n\mid x)+(n\mid y) 的值。
  • 最多只能询问 22 次。

当你完成询问后:

  • 输出一行 !
  • 然后你会读到一个整数 mm
  • 你需要输出一行 (mx)+(my)(m\mid x)+(m\mid y) 的正确结果。
  • 这一行不算作询问

之后进入下一组测试用例。

重要限制

  • 询问次数不能超过 22,否则会直接判 Wrong Answer。
  • 每次输出后必须刷新输出缓冲区,否则会被判 Idleness limit exceeded。

输入输出示例

输入(评测机返回)

2

3

4

1

0

1

输出(你的程序)

0

1

!

4

0

!

2

样例解释

第一组数据:

  • 隐藏值 x=1,y=2x=1,y=2
  • 询问 n=0n=0,返回 (01)+(02)=1+2=3(0\mid 1)+(0\mid 2)=1+2=3
  • 询问 n=1n=1,返回 (11)+(12)=1+3=4(1\mid 1)+(1\mid 2)=1+3=4
  • 输出 ! 后得到 m=1m=1
  • 答案为 (11)+(12)=4(1\mid 1)+(1\mid 2)=4

第二组数据:

  • 隐藏值 x=0,y=0x=0,y=0
  • 询问 n=0n=0,返回 0+0=00+0=0
  • 输出 ! 后得到 m=1m=1
  • 答案为 (10)+(10)=1+1=2(1\mid 0)+(1\mid 0)=1+1=2