結果
| 問題 |
No.1306 Exactly 2 Digits
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2020-11-08 23:42:43 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 2,385 bytes |
| コンパイル時間 | 2,368 ms |
| コンパイル使用メモリ | 212,296 KB |
| 最終ジャッジ日時 | 2025-01-15 21:46:14 |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 8 WA * 63 RE * 52 |
コンパイルメッセージ
main.cpp: In function ‘int main()’:
main.cpp:83:17: warning: format ‘%d’ expects argument of type ‘int*’, but argument 3 has type ‘int’ [-Wformat=]
83 | scanf("%d%d",&acp,acq);
| ~^ ~~~
| | |
| int* int
main.cpp:8:8: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
8 | scanf("%d",&n);
| ~~~~~^~~~~~~~~
main.cpp:12:10: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
12 | scanf("%d%d",&p,&q);
| ~~~~~^~~~~~~~~~~~~~
main.cpp:25:10: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
25 | scanf("%d%d",&p,&q);
| ~~~~~^~~~~~~~~~~~~~
main.cpp:83:12: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
83 | scanf("%d%d",&acp,acq);
| ~~~~~^~~~~~~~~~~~~~~~~
main.cpp:83:12: warning: ‘acq’ may be used uninitialized [-Wmaybe-uninitialized]
83 | scanf("%d%d",&acp,acq);
| ~~~~~^~~~~~~~~~~~~~~~~
main.cpp:82:15: note: ‘acq’ was declared here
82 | int acp,acq;
| ^~~
ソースコード
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
int p,q;
scanf("%d",&n);
if(n==2){
printf("? 2 1\n");
fflush(stdout);
scanf("%d%d",&p,&q);
if(p==-1 && q==0){printf("! 3 2\n");}
else{printf("! 2 3\n");}
fflush(stdout);
return 0;
}
map<pair<int,int>,vector<int>> mp;
vector<pair<int,int>> ks1,ks2;
int dmi=0,dma=0;
vector<int> pmem(n*n-n+1),qmem(n*n-n+1);
for(int i=2;i<=(n*n-n);i++){
printf("? 1 %d\n",i);
fflush(stdout);
scanf("%d%d",&p,&q);
pmem[i]=p;
qmem[i]=q;
ks1.push_back(make_pair(p,q));
mp[make_pair(p,q)].push_back(i);
if(p==q){
dmi=min(dmi,p);
dma=max(dma,p);
}
}
int ky=(dma-dmi+1);
int kh1=n+(n-ky),kh2=(n-ky)*n;
//printf("<<%d %d>>\n",kh1,kh2);
int dlt=(n+1)*(dma);
kh1+=dlt;kh2+=dlt;
for(int i=n;i<n*n;i++){
if(i==kh1){continue;}
p=(kh1/n)-(i/n);
q=(kh1%n)-(i%n);
if(p>q){swap(p,q);}
ks2.push_back(make_pair(p,q));
}
sort(ks1.begin(),ks1.end());
sort(ks2.begin(),ks2.end());
int onev;
if(ks1==ks2){onev=kh1;}
else{onev=kh2;}
vector<int> res(n*n-n+1,-1);
res[1]=onev;
int rp=(onev/n),rq=(onev%n);
int base=-1,bv=-1;
for(int i=2;i<=(n*n-n);i++){
if(mp[make_pair(pmem[i],qmem[i])].size()>1){continue;}
int cp,cq;
cp=rp-pmem[i];
cq=rq-qmem[i];
if(1<=cp && cp<n && 0<=cq && cq<n){res[i]=cp*n+cq;continue;}
cp=rp-qmem[i];
cq=rq-pmem[i];
res[i]=cp*n+cq;
base=i;
bv=res[i];
}
int bp=(bv/n),bq=(bv%n);
for(int i=2;i<=(n*n-n);i++){
if(mp[make_pair(pmem[i],qmem[i])].size()>1){
int pr1=mp[make_pair(pmem[i],qmem[i])][0];
int pr2=mp[make_pair(pmem[i],qmem[i])][1];
int cp,cq;
cp=rp-pmem[i];
cq=rq-qmem[i];
int pdp,pdq;
pdp=bp-cp;
pdq=bq-cq;
if(pdp>pdq){swap(pdp,pdq);}
printf("? %d %d\n",base,pr1);
fflush(stdout);
int acp,acq;
scanf("%d%d",&acp,acq);
if(pdp==acp && pdq==acq){
res[pr1]=cp*n+cq;
cp=rp-qmem[i];
cq=rq-pmem[i];
res[pr2]=cp*n+cq;
}
else{
res[pr2]=cp*n+cq;
cp=rp-qmem[i];
cq=rq-pmem[i];
res[pr1]=cp*n+cq;
}
mp[make_pair(pmem[i],qmem[i])].clear();
}
}
printf("!");
for(int i=1;i<=(n*n-n);i++){
printf(" %d",res[i]);
}printf("\n");
fflush(stdout);
return 0;
}