QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#881637#9734. Identify ChordIdtwteiTL 0ms0kbC++141.3kb2025-02-04 17:02:582025-02-04 17:03:01

Judging History

This is the latest submission verdict.

  • [2025-02-04 17:03:01]
  • Judged
  • Verdict: TL
  • Time: 0ms
  • Memory: 0kb
  • [2025-02-04 17:02:58]
  • Submitted

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;
}

Details

Tip: Click on the bar to expand more detailed information

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

result: