Advertisement
Guest User

ESAd ATAb

a guest
Apr 5th, 2020
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.12 KB | None | 0 0
  1. //ALEX ENACHE
  2.  
  3. #include <vector>
  4. #include <algorithm>
  5.  
  6. #include <math.h>
  7. #include <iomanip>
  8. #include <bitset>
  9.  
  10. #include <queue>
  11. #include <deque>
  12. #include <stack>
  13. #include <string>
  14.  
  15. #include <map>
  16. #include <unordered_map>
  17. #include <set>
  18. #include <unordered_map>
  19.  
  20. #include <random>
  21. #include <time.h>
  22. #include <assert.h>
  23. #include <iostream>
  24.  
  25. using namespace std;
  26.  
  27. const int MAXN = 105;
  28.  
  29. int n;
  30. int dif;
  31. int eq;
  32.  
  33. int ans[MAXN];
  34.  
  35.  
  36. int oposite(int i) {
  37.     return n - i + 1;
  38. }
  39.  
  40.  
  41. void REVERSE() {
  42.     for (int i = 1; i <= n / 2; i++) {
  43.         swap(ans[i], ans[oposite(i)]);
  44.     }
  45. }
  46.  
  47. void XOR() {
  48.     for (int i = 1; i <= n; i++) {
  49.         ans[i] ^= 1;
  50.     }
  51. }
  52.  
  53.  
  54. int changes() {
  55.  
  56.     int DIF, EQ;
  57.  
  58.     if (dif && eq) {
  59.  
  60.         cout << dif << endl;
  61.         cin >> DIF;
  62.         cout << eq << endl;
  63.         cin >> EQ;
  64.  
  65.         if (DIF == ans[dif] && EQ == ans[eq]) {
  66.             //ok
  67.         }
  68.         else if (DIF != ans[dif] && EQ == ans[eq]) {
  69.             REVERSE();
  70.         }
  71.         else if (DIF == ans[dif] && EQ != ans[eq]) {
  72.             REVERSE();
  73.             XOR();
  74.         }
  75.         else if (DIF != ans[dif] && EQ != ans[eq]) {
  76.             XOR();
  77.         }
  78.  
  79.         return 8;
  80.     }
  81.     if (dif) {
  82.  
  83.  
  84.         cout << dif << endl;
  85.         cin >> DIF;
  86.  
  87.         if (DIF != ans[dif]) {
  88.             REVERSE();
  89.         }
  90.  
  91.         return 9;
  92.     }
  93.     if (eq) {
  94.  
  95.         cout << eq << endl;
  96.         cin >> EQ;
  97.  
  98.         if (EQ != ans[eq]) {
  99.             XOR();
  100.         }
  101.  
  102.         return 9;
  103.     }
  104.     return 10;
  105. }
  106.  
  107.  
  108. void solve() {
  109.  
  110.     int pos = 1;
  111.  
  112.     dif = 0;
  113.     eq = 0;
  114.  
  115.     while (pos <= oposite(pos)) {
  116.  
  117.         int moves = changes();
  118.  
  119.         while (moves >= 2 && pos <= oposite(pos)) {
  120.  
  121.             int op = oposite(pos);
  122.  
  123.             cout << pos << endl;
  124.             cin >> ans[pos];
  125.  
  126.  
  127.             cout << op << endl;
  128.             cin >> ans[op];
  129.  
  130.             if (ans[pos] != ans[op]) {
  131.                 dif = pos;
  132.             }
  133.             if (ans[pos] == ans[op]) {
  134.                 eq = pos;
  135.             }
  136.  
  137.             pos++;
  138.             moves -= 2;
  139.         }
  140.  
  141.         if (moves) { //inutil
  142.             int aux;
  143.             cout << 1 << endl;
  144.             cin >> aux;
  145.         }
  146.  
  147.     }
  148.  
  149.     for (int i = 1; i <= n; i++) {
  150.         cout << ans[i];
  151.     }
  152.     cout << endl;
  153.  
  154.     char ret;
  155.     cin >> ret;
  156.  
  157.     assert(ret == 'Y');
  158.  
  159. }
  160.  
  161.  
  162.  
  163. int main() {
  164.  
  165.     int t;
  166.     cin >> t >> n;
  167.  
  168.     for (int i = 1; i <= t; i++) {
  169.         //cout << "Case #" << i << ": ";
  170.         solve();
  171.     }
  172.  
  173.     return 0;
  174. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement