Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define f first
- #define s second
- #define pb push_back
- #define ar array
- #define all(x) x.begin(), x.end()
- #define siz(x) (int)x.size()
- #define FOR(x, y, z) for(int x = (y); x < (z); x++)
- #define ROF(x, z, y) for(int x = (y-1); x >= (z); x--)
- #define F0R(x, z) FOR(x, 0, z)
- #define R0F(x, z) ROF(x, 0, z)
- #define trav(x, y) for(auto&x:y)
- using ll = long long;
- using vi = vector<int>;
- using vl = vector<long long>;
- using pii = pair<int, int>;
- using vpii = vector<pair<int, int>>;
- template<class T> inline bool ckmin(T&a, T b) {return b < a ? a = b, 1 : 0;}
- template<class T> inline bool ckmax(T&a, T b) {return b > a ? a = b, 1 : 0;}
- mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
- const char nl = '\n';
- const int mxN = 2e5 + 10;
- const int MOD = 1e9 + 7;
- const long long infLL = 1e18;
- int n, q;
- void solve(){
- int q_num = 0;
- auto query = [&] (int i, int j, int k){
- cout << i+1 << ' ' << j+1 << ' ' << k+1 << endl;
- q_num++;
- int v; cin >> v; v--; return v;
- };
- // we assume that a[0] < a[1]
- function<vi (vi, int, int) > go = [&](vi nums, int lx, int rx) -> vi {
- vi A[3];
- trav(x, nums){
- int V = query(x, lx, rx);
- if(V==lx){
- A[0].pb(x);
- }
- else if(V==x){
- A[1].pb(x);
- }
- else{
- A[2].pb(x);
- }
- }
- vi ans;
- F0R(i, 3){
- if(siz(A[i])>=2){
- int X = A[i].back(); A[i].pop_back();
- int Y = A[i].back(); A[i].pop_back();
- if(i==0||i==1){
- if(query(X, Y, rx)==X){
- vi res = go(A[i], Y, X);
- ans.insert(ans.end(), res.begin(), res.end());
- }
- else{
- vi res = go(A[i], X, Y);
- ans.insert(ans.end(), res.begin(), res.end());
- }
- }
- else{
- if(query(X, Y, lx)==X){
- vi res = go(A[i], X, Y);
- ans.insert(ans.end(), res.begin(), res.end());
- }
- else{
- vi res = go(A[i], Y, X);
- ans.insert(ans.end(), res.begin(), res.end());
- }
- }
- }
- else{
- if(siz(A[i])) ans.pb(A[i][0]);
- }
- if(i==0) ans.pb(lx);
- if(i==1) ans.pb(rx);
- }
- return ans;
- };
- vi cur; FOR(i, 2, n) cur.pb(i);
- vi ans = go(cur, 0, 1);
- trav(x, ans) cout << x+1 << ' ';
- cout << endl;
- int FOO; cin >> FOO;
- assert(FOO==1);
- //cerr << q_num << endl;
- }
- int32_t main(){
- ios_base::sync_with_stdio(0); cin.tie(0);
- int t; cin >> t >> n >> q;
- while(t--){
- solve();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment