QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#832285#866. Display of SpringscwfxlhTL 0ms0kbC++141.0kb2024-12-25 20:16:292024-12-25 20:16:30

Judging History

This is the latest submission verdict.

  • [2024-12-25 20:16:30]
  • Judged
  • Verdict: TL
  • Time: 0ms
  • Memory: 0kb
  • [2024-12-25 20:16:29]
  • Submitted

answer

#include<bits/stdc++.h>
using namespace std;
int n,mxv[500003],lf[100003],w,ans;
char s[503];
int Query(int a,int b,int W){
	printf("? %d %d %d\n",a,b,W);
	fflush(stdout);
	scanf("\n%c",s);
	if(s[0]=='F')return 1;
	if(s[0]=='S')return 2;
	return 0;
}
void build(int now,int l,int r){
	if(l==r){lf[l]=now;return;}
	build(now*2,l,((l+r)>>1));
	build(now*2+1,((l+r)>>1)+1,r);
	return;
}
void add(int now,int l,int r,int val){
	if(mxv[now]&&Query(mxv[now],val,((l+r)/2))==2)swap(mxv[now],val);
	if(!mxv[now]){swap(mxv[now],val);return;}
	if(Query(mxv[now],val,l)==2)add(now*2,l,((l+r)>>1),val);
	else add(now*2+1,((l+r)>>1)+1,r,val);
	return;
}
int main(){
	scanf("%d",&n);
	build(1,1,100000);
	for(int i=1;i<=n;i++)add(1,1,100000,i);
	puts("!");
	fflush(stdout);
	while(1){
		scanf("\n%c",s);
		if(s[0]=='F')break;
		scanf("%d",&w);
		ans=0;
		for(int i=lf[w];i;i/=2){
			if(ans==0)ans=mxv[i];
			else if(mxv[i]&&Query(ans,mxv[i],w)==2)ans=mxv[i];
		}
		printf("! %d\n",ans);
		fflush(stdout);
	}
	return 0;
}

详细

Test #1:

score: 0
Time Limit Exceeded

input:

3
SECOND
SECOND

output:

? 1 2 50000
? 2 1 1
? 2 3 50000
? 2 3 1
? 1 3 75000
? 1 3 50001
!
! 0
! 0
! 0
! 0
! 0

result: