QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#557518#8939. PermutationsynonymWA 1ms3652kbC++171.3kb2024-09-11 10:06:512024-09-11 10:06:54

Judging History

This is the latest submission verdict.

  • [2024-09-11 10:06:54]
  • Judged
  • Verdict: WA
  • Time: 1ms
  • Memory: 3652kb
  • [2024-09-11 10:06:51]
  • 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;
}

const fnt V = .618;

void solve() {
	int n; cin>>n;
	int l=1,r=n;
	while (l != r) {
		int p = get_second(l,r);
		if (l+2==r) {
			if (p==l+1) {
				int pp = get_second(l,l+1);
				if (pp == p) {
					cout<<l<<endl;
				} else {
					cout<<r<<endl;
				}
			}
			if (p==l) {
				l++;
			} else {
				r--;
			}
			continue;
		}
		if (l+1==r) {
			cout<<l+r-p<<endl;
			return;
		}
		
		int lrp = l+V*(r-l+1);
		int rrp = r-V*(r-l);
		int p2 = -1;
//		cout<<l<<" "<<r<<": "<<lrp<<" "<<rrp<<endl;
		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;
			}
		}
	}
	cout<<l<<endl;
}

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

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 0
Wrong Answer
time: 1ms
memory: 3652kb

input:

3
5
3
3
2

output:

? 1 5
? 1 4
? 1 3
4

result:

wrong answer Token parameter [name=type] equals to "4", doesn't correspond to pattern "?|!" (test case 1)