結果
問題 |
No.850 企業コンテスト2位
|
ユーザー |
![]() |
提出日時 | 2019-03-28 01:06:32 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
RE
|
実行時間 | - |
コード長 | 1,566 bytes |
コンパイル時間 | 887 ms |
コンパイル使用メモリ | 88,952 KB |
実行使用メモリ | 25,604 KB |
平均クエリ数 | 200.93 |
最終ジャッジ日時 | 2024-07-16 16:49:00 |
合計ジャッジ時間 | 5,926 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 21 RE * 6 |
ソースコード
#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; } srand((unsigned) time(NULL)); int d=24; 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; }