QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#557756#8939. PermutationsynonymWA 7ms3616kbC++171.4kb2024-09-11 11:17:562024-09-11 11:17:56

Judging History

This is the latest submission verdict.

  • [2024-09-11 11:17:56]
  • Judged
  • Verdict: WA
  • Time: 7ms
  • Memory: 3616kb
  • [2024-09-11 11:17:56]
  • Submitted

answer

#include "bits/stdc++.h"
using namespace std;
#define int long long
#define fnt long double
#define all(x) begin(x), end(x)
#define sz(x) (int) (x).size()

map<array<int,2>,int> answers;

int get_second(int l, int r) {
	if (answers.count({l,r})) {
		return answers[{l,r}];
	}
	cout<<"? "<<l<<" "<<r<<endl;
	int res; cin>>res;
	answers[{l,r}] = res;
	return res;
}

void output_answer(int k) {
	cout<<"! "<<k<<endl;
}

const fnt V = .618;

void solve() {
	int n; cin>>n;
	answers.clear();
	int l=1,r=n;
	int iter = 0;
	while (l != r) {
		assert(iter<100);
		iter++;
		int p = get_second(l,r);
		if (l+2==r) {
			if (p==l+1) {
				int pp = get_second(l,l+1);
				if (pp == p) {
					output_answer(l);
					return;
				} else {
					output_answer(r);
					return;
				}
			}
			if (p==l) {
				l++;
			} else {
				r--;
			}
			continue;
		}
		if (l+1==r) {
			output_answer(l+r-p);
			return;
		}
		
		int lrp = l+V*(r-l+1);
		int rrp = r-V*(r-l);
		int p2 = -1;
		if (p <= lrp) {
			p2 = get_second(l,lrp);
			if (p2 == p) {
				r = lrp;
			} else {
				l = lrp+1;
			}
		} else {
			assert(p >= rrp);
			p2 = get_second(rrp,r);
			if (p2 == p) {
				l = rrp;
			} else {
				r = rrp-1;
			}
		}
	}
	output_answer(l);
}

signed main() {
	ios::sync_with_stdio(false); cin.tie(nullptr);
	int t; cin>>t;
	while (t--) {
		solve();
	}
	
	return 0;
}

詳細信息

Test #1:

score: 100
Accepted
time: 0ms
memory: 3556kb

input:

3
5
3
3
2
6
6
6
3
4
3
2

output:

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

result:

ok Correct (3 test cases)

Test #2:

score: -100
Wrong Answer
time: 7ms
memory: 3616kb

input:

10000
10
2
2
2
2
3
10
10
10
10
7
10
5
5
1
6
10
4
4
4
4
4

output:

? 1 10
? 1 7
? 1 5
? 1 4
? 1 3
! 4
? 1 10
? 4 10
? 6 10
? 7 10
! 6
? 1 10
? 1 7
? 1 5
? 6 7
! 7
? 1 10
? 1 7
? 1 5
? 1 4
? 2 4
? 2 3

result:

wrong answer Too many queries , n = 10 , now_q 6 (test case 4)