天天看點

XOR Guessing

​ ​​E. XOR Guessing​​

第一次做這種互動題,剛開始還看不懂,現在已經差不多可以了解了,清空緩存區用​

​cout<<endl;​

​​即可,需要注意的是,如果用​

​fflush(stdout)​

​來清空緩存區,注意不能關同步

思路:最多可能是\(2^{14}-1\)總共14位數,最多可以詢問兩次,那麼隻需要分别求出其前7位和後7位即可,​

​1~100​

​​與 x 取&,那麼我們就可以得出x的前7位的值,因為​

​1~100​

​​最多隻有7位,不會影響到前7位,那麼後7位隻需将 x 與​

​(1~100)<<7​

​取&即可

代碼:

// Created by CAD on 2019/8/23.
#include <bits/stdc++.h>
using namespace std;

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout<<"?";
    for(int i=1;i<=100;++i) cout<<" "<<i;
    cout<<endl;
    int x; cin>>x;
    cout<<"?";
    for(int i=0;i<100;++i) cout<<" "<<(i+1<<7);
    cout<<endl;
    int y; cin>>y;
    cout<<"! ";
    cout<<((y&0x7f)|(x&~0x7f))<<endl;
    return 0;
}      

python 版本:

print('?', *[(i+1) << 7 for i in range(100)], '\n', '?', *[(i+1) for i in range(100)])
print("!",((int(input()) & 0x7F)|(int(input()) & ~0x7f)))