結果
| 問題 |
No.1306 Exactly 2 Digits
|
| コンテスト | |
| ユーザー |
Haa
|
| 提出日時 | 2020-12-03 18:16:23 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 145 ms / 2,000 ms |
| コード長 | 2,096 bytes |
| コンパイル時間 | 2,071 ms |
| コンパイル使用メモリ | 183,088 KB |
| 実行使用メモリ | 25,452 KB |
| 平均クエリ数 | 1237.78 |
| 最終ジャッジ日時 | 2024-07-17 08:50:51 |
| 合計ジャッジ時間 | 16,183 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 123 |
コンパイルメッセージ
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){
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}||c1==P{m-1-b,m-1-a}){
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;
}
Haa