QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#607238#8939. PermutationKanate#TL 0ms0kbC++141.3kb2024-10-03 14:25:312024-10-03 14:25:32

Judging History

This is the latest submission verdict.

  • [2024-10-03 14:25:32]
  • Judged
  • Verdict: TL
  • Time: 0ms
  • Memory: 0kb
  • [2024-10-03 14:25:31]
  • Submitted

answer

#include<bits/stdc++.h>
using namespace std;
double A = 0.618;
int solve1(int l,int r);
int solve2(int l,int r);
int solve0(int l,int r);

int ask(int x,int y){
	
	int ans;
	cout << "? " << x << " " << y << endl;cout.flush();
	cin >> ans;
	return ans;
}
// 
int solve0(int l,int r){
	if(l==r){
		return l;
	}
	int x = ask(l,r);
	if(x==l) return solve1(l,r);
	if(x==r) return solve2(l,r);
	int len1 = x - l + 1;
	int len2 = r - x + 1;
	if(len1<=len2){
		int y = ask(l,x);
		if(y==x) return solve2(l,x);
		else return solve1(x,r);
	}else {
		int y = ask(x,r);
		if(y==x) return solve1(x,r);
		return solve2(l,x);
	}
}
// 左端
int solve1(int l,int r){
	if(l==r) return l;
	if(r-l==1) return l + 1;
	int len = A * (r-l+1);
	int x = ask(l,l+len-1);
	if(x == l) return solve1(l,l+len-1);
	else return solve0(l+len,r);
}
int solve2(int l,int r){
	if(l==r) return l;
	if(r-l==1) return l;
	int len = A * (r-l+1);
	int x = ask(r-len+1,r);
	if(x == r) return solve2(r-len+1,r);
	else return solve0(l,r-len);
}
int T;
signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin >> T;
	while(T-->0){
		int n ;
		cin >> n;
		int ans =  solve0(1,n) ;
		cout << "!" << " " << ans << endl;
		cout.flush();
	}
    return 0;
}

詳細信息

Test #1:

score: 0
Time Limit Exceeded

input:

3
5
3
2

output:

? 1 5
? 1 3
? 3 3

result: