結果
問題 |
No.850 企業コンテスト2位
|
ユーザー |
![]() |
提出日時 | 2019-03-27 21:37:48 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,532 bytes |
コンパイル時間 | 694 ms |
コンパイル使用メモリ | 90,296 KB |
実行使用メモリ | 25,476 KB |
平均クエリ数 | 204.36 |
最終ジャッジ日時 | 2024-07-16 16:48:47 |
合計ジャッジ時間 | 5,350 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 21 WA * 1 RE * 5 |
ソースコード
#include<iostream> #include<random> #include<vector> #include<algorithm> #include<set> using namespace std; void ask(int x, int y){ cout<<"? "<<x<<" "<<y<<endl; } int main(){ int n; cin>>n; int ret; if(n<=168){ int mx=1, mx2=2; ask(1, 2); cin>>ret; if(ret==2) swap(mx, mx2); for(int i=3; i<=n; i++){ ask(i, mx2); cin>>ret; if(ret==mx2) continue; ask(i, mx); cin>>ret; if(ret==mx){ mx2=i; }else{ mx2=mx; mx=i; } } cout<<"! "<<mx2<<endl; return 0; } int d=20; int t=0; int v=-1; set<int> st; while(t<d){ int r=rand()%n+1; if(st.find(r)!=st.end()) continue; st.insert(r); if(v==-1) v=r; else{ ask(v, r); cin>>ret; v=ret; } t++; } vector<int> vec; for(int i=1; i<=n; i++){ if(st.find(i)!=st.end()) continue; ask(v, i); cin>>ret; if(ret==i) vec.push_back(i); } int mx=v, mx2=vec[0]; ask(mx, mx2); cin>>ret; if(ret==mx2) swap(mx, mx2); for(int i=1; i<vec.size(); i++){ ask(mx2, vec[i]); cin>>ret; if(ret==mx2) continue; ask(mx, vec[i]); cin>>ret; if(ret==mx) mx2=vec[i]; else{ mx2=mx; mx=vec[i]; } } cout<<"! "<<mx2<<endl; return 0; }