QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#884618#9734. Identify ChordZpairWA 21ms3840kbC++171.1kb2025-02-06 09:39:422025-02-06 09:39:42

Judging History

This is the latest submission verdict.

  • [2025-02-06 09:39:42]
  • Judged
  • Verdict: WA
  • Time: 21ms
  • Memory: 3840kb
  • [2025-02-06 09:39:42]
  • Submitted

answer

#include<bits/stdc++.h>
using namespace std;
int n;
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);
	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 dis(int u,int v){
	int d=abs(u-v);
	return min(d,n-d);
}
int get(int x){
	return (x%n+n)%n;
}
void solve(){
	cin>>n;
	int u=0,v=(n+1)/2;
	for(int i=0;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);
	int opt=(d1<d2?1:-1);
	int l=0,r=n/2,mid=(l+r)>>1,ans=0;
	int d=dis(u,v)-ask(u,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;
	}
	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);	
	}	
}
int main(){
	int T;cin>>T;
	while(T--)solve();
}

详细

Test #1:

score: 100
Accepted
time: 1ms
memory: 3840kb

input:

2
6
2
1
2
2
1
1
1
1
1
4
1
1
1
1
1
1
1
1
1

output:

? 1 4
? 2 4
? 6 4
? 1 4
? 2 4
? 3 4
? 2 4
? 2 4
! 2 4
? 1 3
? 2 3
? 4 3
? 1 3
? 4 3
? 1 3
? 1 3
? 1 3
! 1 3

result:

ok ok (2 test cases)

Test #2:

score: -100
Wrong Answer
time: 21ms
memory: 3712kb

input:

1000
15
6
5
6
6
3
5
6
6
3
-1

output:

? 1 9
? 2 9
? 15 9
? 1 9
? 4 9
? 2 9
? 1 9
? 1 9
? 1 4
! 1 14

result:

wrong answer Wrong answer n=15, actual=5-8, guessed=1-14 (test case 1)