Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define ll long long
- //#define endl "\n"
- #define pb push_back
- #define ms(v,x) memset(v,x,sizeof(v))
- #define ff first
- #define ss second
- #define td(v) v.begin(),v.end()
- #define rep(i,a,n) for (int i=(a);i<(n);i++)
- #define per(i,a,n) for (int i=(n)-1;i>=(a);i--)
- #define sz(x) (int)(x.size())
- #define pii pair<int,int>
- #define pll pair<ll,ll>
- #define M 1000000007
- using namespace std;
- int q(int i){
- cout << i << endl;
- char ent;
- cin >> ent;
- assert(ent != 'N');
- return ent == '1';
- }
- int main(){
- //ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
- int t,b;
- cin >> t >> b;
- int h = b / 2;
- while(t--){
- vector<int> bits(b+1);
- int p1 = -1, p2 = -1;// p1 diff, p2 igual
- int r1,r2;
- int qtd = 1;
- auto rev = [&](){
- for(int i=1;i<=h;i++)
- swap(bits[i], bits[b-i+1]);
- };
- auto comp = [&](){
- for(int i=1;i<=b;i++)
- bits[i] = !bits[i];
- };
- auto fix = [&](){
- if(p1 == -1 && p2 != -1){
- // verifies complement
- r1 = q(p2);
- if(r1 == bits[p2]){
- rev();
- }
- else comp();
- qtd++;
- }
- else if(p1 != -1 && p2 == -1){
- // doesnt discern complement/reversion
- r1 = q(p1);
- if(r1 == bits[p1]){
- }
- else comp();
- qtd++;
- }
- else{
- r1 = q(p1);
- r2 = q(p2);
- if(r1 == bits[p1] && r2 == bits[p2]){
- }
- else if(r1 == bits[p1] && r2 != bits[p2]){
- comp();
- rev();
- }
- else if(r1 != bits[p1] && r2 == bits[p2]){
- rev();
- }
- else{
- comp();
- }
- qtd+=2;
- }
- };
- for(int i=1;i<=h;i++){
- if(qtd%10 == 1 && qtd > 1){
- fix();
- }
- bits[i] = q(i);
- qtd++;
- if(qtd%10 == 1){
- fix();
- bits[i] = q(i);
- qtd++;
- }
- bits[b-i+1] = q(b-i+1);
- qtd++;
- if(bits[i] == bits[b-i+1] && p2 == -1) p2 = i;
- else if(bits[i]!=bits[b-i+1] && p1 == -1) p1 = i;
- }
- for(int i=1;i<=b;i++){
- cout << bits[i];
- }
- cout << endl;
- char ans;
- cin >> ans;
- if(ans=='N') break;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement