QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#883073 | #9734. Identify Chord | chrhaa | TL | 0ms | 0kb | C++14 | 852b | 2025-02-05 14:38:04 | 2025-02-05 14:38:04 |
Judging History
answer
#include<stdio.h>
using namespace std;
#define ll long long
ll T,n,m,f;
inline ll ask(ll x,ll y){
if(f) x=n-x%n,y=n-y%n;
ll z;
printf("? %lld %lld\n",(x-1)%n+1,(y-1)%n+1);
scanf("%lld",&z);
return z;
}
inline ll found(ll x,ll y){
if(f) x=n-x%n,y=n-y%n;
ll z;
printf("! %lld %lld\n",(x-1)%n+1,(y-1)%n+1);
scanf("%lld",&z);
return z;
}
signed main(){
ll x,y,z,l,r,mid;
scanf("%lld",&T);
while(T--){
scanf("%lld",&n);
m=n/2;
x=1;
y=m+1;
while((z=ask(x,y))==m) if(n&1){
if(x+m<y) x++;
else y++;
}else x++,y++;
if(ask(x,y+1)<m){
f=1;
x=n-x;
y=n+n-y;
}
l=x,r=y;
while(l<r){
mid=l+r>>1;
if(ask(x,mid)==z-y+mid) r=mid;
else l=mid+1;
}
z-=y-l+1;
if(ask(n+x-z,l)==1) found(n+x-z,l);
else found(x+z,l);
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Time Limit Exceeded
input:
2 6