jainbot27

Untitled

Mar 26th, 2021
232
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.00 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define f first
  5. #define s second
  6. #define pb push_back
  7. #define ar array
  8. #define all(x) x.begin(), x.end()
  9. #define siz(x) (int)x.size()
  10.  
  11. #define FOR(x, y, z) for(int x = (y); x < (z); x++)
  12. #define ROF(x, z, y) for(int x = (y-1); x >= (z); x--)
  13. #define F0R(x, z) FOR(x, 0, z)
  14. #define R0F(x, z) ROF(x, 0, z)
  15. #define trav(x, y) for(auto&x:y)
  16.  
  17. using ll = long long;
  18. using vi = vector<int>;
  19. using vl = vector<long long>;
  20. using pii = pair<int, int>;
  21. using vpii = vector<pair<int, int>>;
  22.  
  23. template<class T> inline bool ckmin(T&a, T b) {return b < a ? a = b, 1 : 0;}
  24. template<class T> inline bool ckmax(T&a, T b) {return b > a ? a = b, 1 : 0;}
  25. mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
  26.  
  27. const char nl = '\n';
  28. const int mxN = 2e5 + 10;
  29. const int MOD = 1e9 + 7;
  30. const long long infLL = 1e18;
  31.  
  32. int n, q;
  33.  
  34. void solve(){
  35.     int q_num = 0;
  36.     auto query = [&] (int i, int j, int k){
  37.         cout << i+1 << ' ' << j+1 << ' ' << k+1 << endl;
  38.         q_num++;
  39.         int v; cin >> v; v--; return v;
  40.     };    
  41.     // we assume that a[0] < a[1]
  42.     function<vi (vi, int, int) > go = [&](vi nums, int lx, int rx) -> vi {
  43.         vi A[3];
  44.         trav(x, nums){
  45.             int V = query(x, lx, rx);
  46.             if(V==lx){
  47.                 A[0].pb(x);
  48.             }
  49.             else if(V==x){
  50.                 A[1].pb(x);
  51.             }
  52.             else{
  53.                 A[2].pb(x);
  54.             }
  55.         }
  56.         vi ans;
  57.         F0R(i, 3){
  58.             if(siz(A[i])>=2){
  59.                 int X = A[i].back(); A[i].pop_back();
  60.                 int Y = A[i].back(); A[i].pop_back();
  61.                 if(i==0||i==1){
  62.                     if(query(X, Y, rx)==X){
  63.                         vi res = go(A[i], Y, X);
  64.                         ans.insert(ans.end(), res.begin(), res.end());
  65.                     }
  66.                     else{
  67.                         vi res = go(A[i], X, Y);
  68.                         ans.insert(ans.end(), res.begin(), res.end());
  69.                     }
  70.                 }
  71.                 else{
  72.                     if(query(X, Y, lx)==X){
  73.                         vi res = go(A[i], X, Y);
  74.                         ans.insert(ans.end(), res.begin(), res.end());
  75.                     }
  76.                     else{
  77.                         vi res = go(A[i], Y, X);
  78.                         ans.insert(ans.end(), res.begin(), res.end());
  79.                     }
  80.                 }
  81.             }
  82.             else{
  83.                 if(siz(A[i])) ans.pb(A[i][0]);
  84.             }
  85.             if(i==0) ans.pb(lx);
  86.             if(i==1) ans.pb(rx);
  87.         }
  88.         return ans;
  89.     };
  90.     vi cur; FOR(i, 2, n) cur.pb(i);
  91.     vi ans = go(cur, 0, 1);
  92.     trav(x, ans) cout << x+1 << ' ';
  93.     cout << endl;
  94.     int FOO; cin >> FOO;
  95.     assert(FOO==1);
  96.     //cerr << q_num << endl;
  97. }
  98.  
  99. int32_t main(){
  100.     ios_base::sync_with_stdio(0); cin.tie(0);
  101.     int t; cin >> t >> n >> q;
  102.     while(t--){
  103.         solve();
  104.     }
  105.  
  106.     return 0;
  107. }
Advertisement
Add Comment
Please, Sign In to add comment