結果
問題 | No.1306 Exactly 2 Digits |
ユーザー |
![]() |
提出日時 | 2020-12-03 18:10:44 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,078 bytes |
コンパイル時間 | 1,848 ms |
コンパイル使用メモリ | 181,444 KB |
実行使用メモリ | 25,580 KB |
平均クエリ数 | 1237.78 |
最終ジャッジ日時 | 2024-07-17 08:49:05 |
合計ジャッジ時間 | 16,911 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 114 WA * 9 |
コンパイルメッセージ
main.cpp: In function 'int main()': main.cpp:39:22: warning: 'mnp' may be used uninitialized [-Wmaybe-uninitialized] 39 | int ff=-p[mnp].first+p[mxp].first+1; | ^ main.cpp:20:18: note: 'mnp' was declared here 20 | int mxp, mnp; | ^~~ main.cpp:39:35: warning: 'mxp' may be used uninitialized [-Wmaybe-uninitialized] 39 | int ff=-p[mnp].first+p[mxp].first+1; | ^ main.cpp:20:13: note: 'mxp' was declared here 20 | int mxp, mnp; | ^~~
ソースコード
#include <bits/stdc++.h> using namespace std; typedef long long int ll; typedef pair<int,int> P; typedef vector<ll> VI; typedef vector<VI> VVI; #define REP(i,n) for(int i=0;i<n;i++) #define ALL(v) v.begin(),v.end() constexpr ll MOD=998244353; constexpr ll INF=1e18; int main(){ int n; cin >> n; int m=n; n=n*n-n; int a, b; vector<P> p(n), ans(n,{-1,-1}); map<P,int> mp; vector<P> same; int mx=-1, mn=2*n; int mxp, mnp; REP(i,n){ cout << "? " << i+1 << " " << 1 << endl; cin >> a >> b; p[i]={a,b}; if(mp[p[i]]!=0) same.push_back({mp[p[i]]-1,i}); else mp[p[i]]=i+1; if(a+b>mx){ mx=a+b; mxp=i; } if(a+b<mn){ mn=a+b; mnp=i; } } int ox, oy; int ff=-p[mnp].first+p[mxp].first+1; if(ff==m||ff==m-1){ if(ff==m){ ox=-p[mnp].first; oy=-p[mnp].second+1; } else{ ox=-p[mnp].second; oy=-p[mnp].first+1; } } else{ int sf=-p[mnp].second+p[mxp].first+1; if(sf==m){ ox=-p[mnp].second; oy=-p[mnp].first+1; } else{ ox=-p[mnp].first; oy=-p[mnp].second+1; } } ans[0]={ox,oy}; ans[mnp]={0,1}; ans[mxp]={m-1,m-1}; if(ox!=oy+1){ for(P s:same){ cout << "? " << s.first+1 << " " << mnp+1 << endl; cin >> a >> b; P c1={ox+p[s.first].first,oy+p[s.first].second}; P c2={ox+p[s.first].second,oy+p[s.first].first}; if(c1==P{a,b+1}||c1==P{b,a+1}){ ans[s.first]=c1; ans[s.second]=c2; } else{ ans[s.first]=c2; ans[s.second]=c1; } } } else{ for(P s:same){ cout << "? " << mxp+1 << " " << s.first+1 << endl; cin >> a >> b; P c1={ox+p[s.first].first,oy+p[s.first].second}; P c2={ox+p[s.first].second,oy+p[s.first].first}; if(c1==P{m-1-a,m-1-b}){ ans[s.first]=c1; ans[s.second]=c2; } else{ ans[s.first]=c2; ans[s.second]=c1; } } } cout << "! "; REP(i,n){ if(ans[i]==P{-1,-1}){ P c1={ox+p[i].first,oy+p[i].second}; if(c1.first>=0&&c1.first<m&&c1.second>=1&&c1.second<m) ans[i]=c1; else ans[i]={ox+p[i].second,oy+p[i].first}; } cout << ans[i].first+ans[i].second*m << " "; } cout << endl; return 0; }