Advertisement
AquaBlitz11

Dat Bae (Test set 2)

Apr 7th, 2019
284
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.73 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const int N = 1030;
  5. const int F = 5;
  6. char Q[F][N], A[F][N];
  7.  
  8. void build(int l, int r, int d, int z)
  9. {
  10.     if (d == F) return;
  11.     for (int i = l; i <= r; i += z) {
  12.         int j = min(i+z-1, r);
  13.         fill(Q[d]+i, Q[d]+j+1, (i-l)/z%2==0 ? '0' : '1');
  14.         build(i, j, d+1, z/2);
  15.     }
  16. }
  17.  
  18. vector<int> ans;
  19. void read(int l, int r, int b, int e, int d, int z)
  20. {
  21.     //for (int i = 0; i < d; ++i) fprintf(stderr, "| ");
  22.     //printf("read %d,%d %d,%d\n", l, r, b, e);
  23.     if (b > e) {
  24.         for (int i = l; i <= r; ++i)
  25.             ans.push_back(i);
  26.         return;
  27.     }
  28.     if (l == r) return;
  29.     vector<int> li(1, 0);
  30.     int prev = '0';
  31.     for (int i = b; i <= e; ++i) {
  32.         if (A[d][i] != prev)
  33.             li.push_back(0);
  34.         ++li.back();
  35.         prev = A[d][i];
  36.     }
  37.     int sum = b;
  38.     for (int i = l; i <= r; i += z) {
  39.         int j = min(i+z-1, r);
  40.         int x = (i-l)/z;
  41.         x = x < li.size() ? li[x] : 0;
  42.         read(i, j, sum, sum+x-1, d+1, z/2);
  43.         sum += x;
  44.     }
  45. }
  46.  
  47. int main()
  48. {
  49.     int T;
  50.     scanf("%d", &T);
  51.     while (T--) {
  52.         ans.clear();
  53.         int n, b, _;
  54.         scanf("%d%d%d", &n, &b, &_);
  55.         build(0, n-1, 0, 1<<(F-1));
  56.         for (int i = 0; i < F; ++i) {
  57.             Q[i][n] = '\0';
  58.             printf("%s\n", Q[i]);
  59.             fflush(stdout);
  60.             scanf("%s", A[i]);
  61.         }
  62.         read(0, n-1, 0, n-b-1, 0, 1<<(F-1));
  63.         printf("%d", ans[0]);
  64.         for (int i = 1; i < ans.size(); ++i)
  65.             printf(" %d", ans[i]);
  66.         printf("\n");
  67.         fflush(stdout);
  68.         scanf("%d", &_);
  69.         if (_ != 1)
  70.             return 0;
  71.     }
  72.  
  73.     return 0;
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement