Submission #386833

#TimeUsernameProblemLanguageResultExecution timeMemory
386833kshitij_sodaniZagonetka (COI18_zagonetka)C++14
9 / 100
10 ms384 KiB
//#pragma GCC optimize("Ofast,unroll-loops")
#include <bits/stdc++.h>
using namespace std;
typedef long long llo;
#define mp make_pair
#define pb push_back
#define a first 
#define b second
//#define endl '\n'

int n;
int it[101];
bool check(vector<int> aa){
	cout<<"query ";
	for(auto j:aa){
		cout<<j<<" ";
	}
	cout<<endl;
	int x;
	cin>>x;
	return x;
}
void answer(vector<int> aa,vector<int> bb){
	cout<<"end"<<endl;
	for(auto j:aa){
		cout<<j<<" ";
	}
	cout<<endl;
	for(auto j:bb){
		cout<<j<<" ";
	}
	cout<<endl;

	return;


}
int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>it[i];
	}
	if(n<=6){
		vector<int> ss;
		for(int i=1;i<=n;i++){
			ss.pb(i);
		}
		vector<int> ans;
		vector<int> ans2;
		while(true){
			if(check(ss)){
				if(ans.size()==0){
					ans=ss;
				}
				ans2=ss;
			}
			if(next_permutation(ss.begin(),ss.end())){
				continue;
			}
			else{
				break;
			}
		}
		answer(ans,ans2);
		return 0;
	}
	if(n>=30 and n<=70){
	//if(true){
		for(int i=0;i<n;i++){
			for(int j=i+1;j<n;j++){
				vector<int> ss;
				for(int k=0;k<n;k++){
					ss.pb(it[k]);
				}
				swap(ss[i],ss[j]);
				if(!check(ss)){
					vector<int> aa;
					vector<int> bb;
					for(int k=1;k<=n;k++){
						bb.pb(k);
						aa.pb(n-k+1);
					}
					for(int ii=1;ii<=n;ii++){
						for(int jj=1;jj<=n;jj++){
							if(ii==jj){
								continue;
							}
							if(ii<jj and it[i]>it[j]){
								continue;
							}
							if(ii>jj and it[i]<it[j]){
								continue;
							}
							queue<int> ss;
							for(int k=1;k<=n;k++){
								if(k!=ii and k!=jj){
									ss.push(k);
								}
							}
							vector<int> cur;
							for(int k=0;k<n;k++){
								if(k==i){
									cur.pb(ii);
									continue;
								}
								else if(k==j){
									cur.pb(jj);
									continue;
								}
								cur.pb(ss.front());
								ss.pop();
							}
							aa=min(aa,cur);
							queue<int> ss2;
							for(int k=n;k>=1;k--){
								if(k!=ii and k!=jj){
									ss2.push(k);
								}
							}

							vector<int> cur2;
							for(int k=0;k<n;k++){
								if(k==i){
									cur2.pb(ii);
									continue;
								}
								else if(k==j){
									cur2.pb(jj);
									continue;
								}
								cur2.pb(ss2.front());
								ss2.pop();
							}
							bb=max(bb,cur2);
						}
					}
					answer(aa,bb);

					return 0;
				}
			}
		}


	}








 
 
	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...