QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#884663 | #9734. Identify Chord | Zpair | WA | 8ms | 3840kb | C++17 | 1.4kb | 2025-02-06 09:56:36 | 2025-02-06 09:56:36 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
int n;
int x,y;
int dis(int u,int v){
int d=abs(u-v);
return min(d,n-d);
}
int ask(int u,int v){
assert(u>=0);
assert(u<n);
assert(v>=0);
assert(v<n);
printf("? %d %d\n",u+1,v+1);
fflush(stdout);
// return min({dis(u,x)+1+dis(y,v),dis(u,y)+1+dis(x,v),dis(u,v)});
int d;scanf("%d",&d);
return d;
}
void ret(int u,int v){
assert(u>=0);
assert(u<n);
assert(v>=0);
assert(v<n);
printf("! %d %d\n",u+1,v+1);
fflush(stdout);
int d;scanf("%d",&d);
}
int get(int x){
return (x%n+n)%n;
}
void solve(){
cin>>n;
// cin>>x>>y;
int u=0,v=(n+1)/2;
for(int i=1;ask(u,v)==n/2;++i){
if(n&1){
if(i&1)u=get(u+1);
else v=get(v+1);
}
else{
u=get(u+1);
v=get(v+1);
}
}
int d1=ask(get(u+1),v);
int d2=ask(get(u-1),v);
if(d1!=d2){
int opt=(d1<d2?1:-1);
int l=1,r=n/2,mid=(l+r)>>1,ans=0;
int uu=get(u+opt);
int d=dis(uu,v)-ask(uu,v);
while(l<=r){
int w=get(u+mid*opt);
if(dis(w,v)-ask(w,v)==d)
ans=mid,l=mid+1;
else r=mid-1;
mid=(l+r)>>1;
}
assert(ans!=0);
int w=get(u+ans*opt),nd=ask(w,v);
int z=get(v-(nd-1)*opt);
if(ask(w,z)==1)
ret(w,z);
else{
z=get(v+(nd-1)*opt);
ret(w,z);
}
}
else{
int nd=ask(u,v);
int w=get(v+(nd-1));
if(ask(u,w)==1)ret(u,w);
else{
w=get(v-(nd-1));
ret(u,w);
}
}
}
int main(){
int T;cin>>T;
while(T--)solve();
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 1ms
memory: 3712kb
input:
2 6 2 1 2 1 1 1 1 1 1 4 1 1 1 1 1 1
output:
? 1 4 ? 2 4 ? 6 4 ? 2 4 ? 3 4 ? 2 4 ? 2 4 ? 2 4 ! 2 4 ? 1 3 ? 2 3 ? 4 3 ? 1 3 ? 1 3 ! 1 3
result:
ok ok (2 test cases)
Test #2:
score: -100
Wrong Answer
time: 8ms
memory: 3840kb
input:
1000 15 6 5 6 5 2 2 3 2 1 1 19 4 3 5 3 5 2 3 2 3 1 17 4 3 5 3 4 2 3 2 3 1 15 7 7 7 7 6 7 6 6 3 1 0 0 1 -1
output:
? 1 9 ? 2 9 ? 15 9 ? 2 9 ? 5 9 ? 7 9 ? 6 9 ? 5 9 ? 5 8 ! 5 8 ? 1 11 ? 2 11 ? 19 11 ? 2 11 ? 6 11 ? 3 11 ? 4 11 ? 3 11 ? 3 10 ! 3 12 ? 1 10 ? 2 10 ? 17 10 ? 2 10 ? 5 10 ? 3 10 ? 4 10 ? 3 10 ? 3 9 ! 3 11 ? 1 9 ? 2 9 ? 2 10 ? 3 10 ? 3 11 ? 4 11 ? 2 11 ? 2 11 ? 14 11 ? 12 11 ? 11 11 ? 11 11 ? 11 10 ! 11...
result:
wrong answer Wrong answer n=15, actual=1-3, guessed=11-10 (test case 4)