Advertisement
AquaBlitz11

Untitled

Apr 4th, 2020
334
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.26 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const int N = 150;
  5.  
  6. int cntq=0;
  7. int get(int x) {
  8.     int v = 0;
  9.     printf("%d\n", x);
  10.     fflush(stdout);
  11.     scanf("%d", &v);
  12.     ++cntq;
  13.     /*if (cntq > 120)
  14.         fprintf(stderr, "query(%d) = %d\n", x, v);*/
  15.     return v;
  16. }
  17.  
  18. int main()
  19. {
  20.     int T, B;
  21.     scanf("%d%d", &T, &B);
  22.     while (T--) {
  23.         cntq=0;
  24.         int val[N] = {};
  25.         int samepair[N] = {}, diffpair[N] = {};
  26.  
  27.         for (int i = 0; i < B/10; ++i) {
  28.             for (int j = 0; j < 5; ++j) {
  29.                 int x = i*5+j + 1;
  30.                 int y = B-x+1;
  31.                 val[x] = get(x);
  32.                 val[y] = get(y);
  33.                 if (val[x] == val[y]) {
  34.                     samepair[i] = x;
  35.                     if (i < B/10/2) samepair[N-1] = x;
  36.                     else samepair[N-2] = x;
  37.                 } if (val[x] != val[y]) {
  38.                     diffpair[i] = x;
  39.                     if (i < B/10/2) diffpair[N-1] = x;
  40.                     else diffpair[N-2] = x;
  41.                 }
  42.             }
  43.         }
  44.  
  45.         for (int i = 0; i < B/10; ++i) {
  46.             if (samepair[i] == 0) {
  47.                 get(1);
  48.             } else if (get(samepair[i]) != val[samepair[i]]) { // complement - same pair change
  49.                 for (int j = 0; j < 5; ++j) {
  50.                     int x = i*5+j + 1;
  51.                     int y = B-x+1;
  52.                     val[x] = 1-val[x];
  53.                     val[y] = 1-val[y];
  54.                 }
  55.             }
  56.             if (diffpair[i] == 0) {
  57.                 get(1);
  58.             } else if (get(diffpair[i]) != val[diffpair[i]]) { // reverse - diff pair change
  59.                 for (int j = 0; j < 5; ++j) {
  60.                     int x = i*5+j + 1;
  61.                     int y = B-x+1;
  62.                     swap(val[x], val[y]);
  63.                 }
  64.             }
  65.         }
  66.  
  67.         /*for (int i = 1; i <= B; ++i)
  68.             fprintf(stderr,"%d", val[i]);
  69.         fprintf(stderr, "\n");*/
  70.  
  71.         // last time
  72.         if (B == 100) {
  73.             for (int i = 1; i <= 2; ++i) {
  74.                 //fprintf(stderr, "check %d and %d\n", samepair[N-i], diffpair[N-i]);
  75.                 if (samepair[N-i] != 0 && get(samepair[N-i]) != val[samepair[N-i]]) { // complement - same pair change
  76.                     //fprintf(stderr, "complemented\n");
  77.                     for (int j = 0; j < B/4; ++j) {
  78.                         int x = (i-1)*B/4 + j + 1;
  79.                         int y = B-x+1;
  80.                         val[x] = 1-val[x];
  81.                         val[y] = 1-val[y];
  82.                     }
  83.                 }
  84.                 if (diffpair[N-i] != 0 && get(diffpair[N-i]) != val[diffpair[N-i]]) { // reverse - diff pair change
  85.                     //fprintf(stderr, "reversed\n");
  86.                     for (int j = 0; j < B/4; ++j) {
  87.                         int x = (i-1)*B/4 + j + 1;
  88.                         int y = B-x+1;
  89.                         swap(val[x], val[y]);
  90.                     }
  91.                 }
  92.             }
  93.         }
  94.  
  95.  
  96.         for (int i = 1; i <= B; ++i)
  97.             printf("%d", val[i]);
  98.         printf("\n");
  99.         fflush(stdout);
  100.         char res;
  101.         scanf(" %c", &res);
  102.         if (res == 'N')
  103.             break;
  104.  
  105.     }
  106.    
  107.     return 0;
  108. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement