結果
問題 | No.850 企業コンテスト2位 |
ユーザー | mtsd |
提出日時 | 2019-07-05 21:40:47 |
言語 | C++11 (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 33 ms / 2,000 ms |
コード長 | 1,750 bytes |
コンパイル時間 | 1,364 ms |
コンパイル使用メモリ | 88,228 KB |
実行使用メモリ | 25,604 KB |
平均クエリ数 | 200.11 |
最終ジャッジ日時 | 2024-07-16 17:17:24 |
合計ジャッジ時間 | 3,330 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 27 |
ソースコード
#include <iostream> #include <vector> #include <string> #include <cmath> #include <algorithm> #include <utility> #include <queue> #include <set> #include <map> #include <deque> #include <iomanip> #include <cstdio> #include <stack> #include <numeric> using namespace std; typedef long long ll; typedef pair<int,int> PII; typedef vector<int> VI; typedef vector<VI> VVI; #define MP make_pair #define PB push_back #define inf 1000000007 #define mod 1000000007 #define rep(i,n) for(int i=0;i<(int)(n);++i) int q(int a,int b){ cout << "? " << a << " " << b << endl; int res; cin >> res; return res; } int main(){ int n; cin >> n; int ans; vector<int>a; rep(i,n){ a.push_back(i+1); } vector<vector<int> > s(n+1); int mx = 0; while(1){ vector<int> b; int m = a.size(); if(m==1){ mx = a[0]; break; } rep(i,m/2){ int p = q(a[2*i],a[2*i+1]); b.push_back(p); if(p==a[2*i]){ s[p].push_back(a[2*i+1]); }else{ s[p].push_back(a[2*i]); } } if(m%2){ b.push_back(a[m-1]); } a = b; } a = s[mx]; while(1){ vector<int> b; int m = a.size(); if(m==1){ mx = a[0]; break; } rep(i,m/2){ int p = q(a[2*i],a[2*i+1]); b.push_back(p); if(p==a[2*i]){ s[p].push_back(a[2*i+1]); }else{ s[p].push_back(a[2*i]); } } if(m%2){ b.push_back(a[m-1]); } a = b; } cout << "! " << mx << endl; return 0; }