QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#883073#9734. Identify ChordchrhaaTL 0ms0kbC++14852b2025-02-05 14:38:042025-02-05 14:38:04

Judging History

This is the latest submission verdict.

  • [2025-02-05 14:38:04]
  • Judged
  • Verdict: TL
  • Time: 0ms
  • Memory: 0kb
  • [2025-02-05 14:38:04]
  • Submitted

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

详细

Test #1:

score: 0
Time Limit Exceeded

input:

2
6

output:


result: