999ms

https://codeforces.com/gym/102168/problem/F

Jan 27th, 2020
185
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.34 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define all(x) (x).begin(),(x).end()
  3.  
  4. using namespace std;
  5. using ll = long long;
  6.  
  7. int itr = 0;
  8.  
  9. char ask(const vector<int>& a, const vector<int>& b) {
  10.     itr++;
  11.     if (itr > 9) {
  12.         while (true);
  13.     }
  14.     cout << "? " << a.size() << "\n";
  15.     for (int val : a) {
  16.         cout << val + 1 << ' ';
  17.     }
  18.     cout << '\n';
  19.     for (int val : b) {
  20.         cout << val + 1 << ' ';
  21.     }
  22.     cout << endl;
  23.     char res;
  24.     cin >> res;
  25.     return res;
  26. }
  27.  
  28. void PrintAnswer(int val) {
  29.     cout << "! " << val + 1 << endl;
  30.     exit(0);
  31. }
  32.  
  33. void Solve(vector<int> arr, char bad) {
  34.     if (arr.size() == 1) {
  35.         PrintAnswer(arr[0]);
  36.     } else if (arr.size() == 2) {
  37.         if (ask({arr[0]}, {arr[1]}) == bad) {
  38.             PrintAnswer(arr[1]);
  39.         } else {
  40.             PrintAnswer(arr[0]);
  41.         }
  42.     } else {
  43.         vector<int> a, b;
  44.         const int n = arr.size();
  45.         int sz = n / 3 + ((n % 3 == 2) ? 1 : 0);
  46.         for (int i = 0; i < sz; i++) {
  47.             a.push_back(arr[i]);
  48.             b.push_back(arr[i + sz]);
  49.         }
  50.         auto res = ask(a, b);
  51.         if (res == '=') {
  52.             vector<int> c;
  53.             for (int i = 2 * sz; i < n; i++) {
  54.                 c.push_back(arr[i]);
  55.             }
  56.             Solve(c, bad);
  57.         } else {
  58.             if (res == bad) {
  59.                 Solve(b, bad);
  60.             } else {
  61.                 Solve(a, bad);
  62.             }
  63.         }
  64.     }
  65. }
  66.  
  67. int main() {
  68.     ios_base::sync_with_stdio(false);
  69.     cin.tie(nullptr);
  70.     cout.tie(nullptr);
  71.     int n;
  72.     cin >> n;
  73.     vector<int> a, b, c, d;
  74.     int sz = n / 3;
  75.     for (int i = 0; i < sz; i++) {
  76.         a.push_back(i);
  77.         b.push_back(sz + i);
  78.         c.push_back(sz * 2 + i);
  79.     }
  80.     for (int i = 3 * sz; i < n; i++) {
  81.         d.push_back(i);
  82.     }
  83.     auto res1 = ask(a, b);
  84.     if (res1 == '=') {
  85.         auto res2 = ask(a, c);
  86.         if (res2 == '=') {
  87.             a.clear();
  88.             for (int i = 0; i < d.size(); i++) {
  89.                 a.push_back(i);
  90.             }
  91.             Solve(d, ask(a, d));
  92.         } else {
  93.             Solve(c, res2);
  94.         }
  95.     } else {
  96.         auto res2 = ask(c, a);
  97.         if (res2 == '=') {
  98.             Solve(b, res1);
  99.         } else {
  100.             Solve(a, res2);
  101.         }
  102.     }
  103. }
Add Comment
Please, Sign In to add comment