Submission #1345357

#TimeUsernameProblemLanguageResultExecution timeMemory
1345357ThylOneTower (BOI25_tow)C++17
0 / 100
688 ms468 KiB
//####################
//Tower
//####################
#include<bits/stdc++.h> 


#define pb push_back
#define eb emplace_back
#define rall(x) x.rbegin(), x.rend()
#define all(x) x.begin(), x.end()
 
using namespace std;
vector<pair<int,int>> query(int x, int y , int z){
	cout.flush();
	cout <<"? "<<x<<' '<<y<<' ' <<z<<endl;
	int r;cin>>r;
	vector<pair<int,int>> re;
	for(int i = 0 ; i < r ; i++){
		int a,b;cin>>a>>b;
		re.emplace_back(a,b);
	}
	cout.flush();
	
	return re;
}
void answer(vector<int> ans){
	cout.flush();
	cout <<"! ";
	for(int u:ans)cout <<u<<" ";
	cout << endl;
	cout.flush();
}

void solve(){
	int n;cin>>n;

	if(n==3){
		answer({0,1,2});
	}else{
		pair<int,int> farr = {0,1};
		for(int i = 2; i < n ; i++){
			if(farr.first != i && farr.second !=i)
				farr = query(farr.first, farr.second,i)[0];
		}
		vector<int> ans = {farr.first, farr.second};
		set<int> S;
		S.insert(ans[0]);
		S.insert(ans[1]);

		for(int t = 2 ; t < n ; t++){
			
			for(int x = 0 ; x < n ; x++){
				if(S.count(x)==0){
					auto q = query(ans[ans.size()-1], ans[ans.size()-2],x);
					if(q.size()==2){
						if(q[0] == make_pair(ans[ans.size()-1], ans[ans.size()-2])){
							swap(q[0], q[1]);
						}
						if(q[0].first == x)
							swap(q[0].first, q[0].second);

						S.insert(x);
						if(q[0].first != ans.back() && t==2)
							swap(ans[0], ans[1]);
						ans.emplace_back(x);
						break;
					}
				}
			}
		}
		answer(ans);
	}
}
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	int T, K;cin>>T>>K;
	for(int i  = 0 ; i < T ; i++){
		solve();
	}
	return 0;
};
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...