QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#881637 | #9734. Identify Chord | Idtwtei | TL | 0ms | 0kb | C++14 | 1.3kb | 2025-02-04 17:02:58 | 2025-02-04 17:03:01 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
#define pii pair<int,int>
const int N=1e5+100;
#define gc getchar()
#define rd read()
inline int read(){
int x=0,f=0; char c=gc;
for(;c<'0'||c>'9';c=gc) f|=(c=='-');
for(;c>='0'&&c<='9';c=gc) x=(x<<1)+(x<<3)+(c^48);
return f?-x:x;
}
int ask(int x,int y){ cout<<"? "<<x<<" "<<y<<endl; return rd; }
int n;
void solve(){
n=rd;
int x=1,y=n/2+1,pos,dis;
for(int op=0;;op^=1){
dis=ask(x,y); if(dis!=n/2) break;
if(n%2==0) ++x,++y;
else{
if(op) ++x;
else ++y;
}
}
int d1=ask((x+n-2)%n+1,y),d2=ask(x%n+1,y);
if(d1>=dis&&d2>=dis) pos=x;
else if(d1<dis){
int l=1,r=n/2;
while(l<r){
int mid=l+r+1>>1;
if(ask((x+n-mid-1)%n+1,y)==dis-mid) l=mid;
else r=mid-1;
}
pos=(x+n-l-1)%n+1;
}
else{
int l=1,r=n/2;
while(l<r){
int mid=l+r+1>>1;
if(ask((x+mid-1)%n+1,y)==dis-mid) l=mid;
else r=mid-1;
}
pos=(x+l-1)%n+1;
}
int dt=dis-min((x+n-pos)%n,(pos+n-x)%n)-1;
int ans1=(y+dt-1)%n+1,ans2=(y+n-dt-1)%n+1;
cout<<"! "<<pos<<" "<<(ask(pos,ans1)==1?ans1:ans2)<<endl;
if(rd==-1) exit(0);
}
int main(){
int T=rd;
while(T--) solve();
return 0;
}
详细
Test #1:
score: 0
Time Limit Exceeded
input:
2 6 2 2 1 1
output:
? 1 4 ? 6 4 ? 2 4 ? 3 4 ! 2 ? 2 4