Advertisement
Guest User

Untitled

a guest
Apr 4th, 2020
269
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.11 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define ll long long
  3. //#define endl "\n"
  4. #define pb push_back
  5. #define ms(v,x) memset(v,x,sizeof(v))
  6. #define ff first
  7. #define ss second
  8. #define td(v) v.begin(),v.end()
  9. #define rep(i,a,n) for (int i=(a);i<(n);i++)
  10. #define per(i,a,n) for (int i=(n)-1;i>=(a);i--)
  11. #define sz(x) (int)(x.size())
  12. #define pii pair<int,int>
  13. #define pll pair<ll,ll>
  14. #define M   1000000007
  15. using namespace std;
  16. int q(int i){
  17.     cout << i << endl;
  18.     char ent;
  19.     cin >> ent;
  20.     assert(ent != 'N');
  21.     return ent == '1';
  22. }
  23. int main(){
  24.     //ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
  25.     int t,b;
  26.     cin >> t >> b;
  27.     int h = b / 2;
  28.     while(t--){
  29.         vector<int> bits(b+1);
  30.         int p1 = -1, p2 = -1;// p1 diff, p2 igual
  31.         int r1,r2;
  32.         int qtd = 1;
  33.         auto rev = [&](){
  34.             for(int i=1;i<=h;i++)
  35.                 swap(bits[i], bits[b-i+1]);
  36.         };
  37.         auto comp = [&](){
  38.             for(int i=1;i<=b;i++)
  39.                 bits[i] = !bits[i];
  40.         };
  41.         auto fix = [&](){
  42.             if(p1 == -1 && p2 != -1){
  43.                 // verifies complement
  44.                 r1 = q(p2);
  45.                 if(r1 == bits[p2]){
  46.                     rev(); 
  47.                 }
  48.                 else comp();
  49.                 qtd++;
  50.             }
  51.             else if(p1 != -1 && p2 == -1){
  52.                 // doesnt discern complement/reversion
  53.                 r1 = q(p1);
  54.                 if(r1 == bits[p1]){
  55.                 }
  56.                 else comp();
  57.                 qtd++;
  58.             }
  59.             else{
  60.                 r1 = q(p1);
  61.                 r2 = q(p2);
  62.                 if(r1 == bits[p1] && r2 == bits[p2]){
  63.  
  64.                 }
  65.                 else if(r1 == bits[p1] && r2 != bits[p2]){
  66.                     comp();
  67.                     rev();
  68.                 }
  69.                 else if(r1 != bits[p1] && r2 == bits[p2]){
  70.                     rev();
  71.                 }
  72.                 else{
  73.                     comp();
  74.                 }
  75.                 qtd+=2;
  76.             }
  77.         };
  78.         for(int i=1;i<=h;i++){
  79.             if(qtd%10 == 1 && qtd > 1){
  80.                 fix();
  81.             }
  82.             bits[i] = q(i);
  83.             qtd++;
  84.             if(qtd%10 == 1){
  85.                 fix();
  86.                 bits[i] = q(i);
  87.                 qtd++;
  88.             }
  89.             bits[b-i+1] = q(b-i+1);
  90.             qtd++;
  91.             if(bits[i] == bits[b-i+1] && p2 == -1) p2 = i;
  92.             else if(bits[i]!=bits[b-i+1] && p1 == -1) p1 = i;
  93.         }
  94.         for(int i=1;i<=b;i++){
  95.             cout << bits[i];
  96.         }
  97.         cout << endl;
  98.         char ans;
  99.         cin >> ans;
  100.         if(ans=='N') break;
  101.     }
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement