QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#858231 | #8939. Permutation | littleandy | TL | 0ms | 0kb | C++14 | 905b | 2025-01-16 15:12:56 | 2025-01-16 15:12:56 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
const double P = (sqrt(5) - 1.0) / 2.0;
int ask(int l, int r) {
if (l == r) return 0;
fflush(stdout);
printf("? %d %d\n", l, r);
int res; scanf("%d", &res);
return res;
}
void determine(int x) {
fflush(stdout);
printf("! %d\n", x);
return;
}
void solve(int l, int r, int res) {
if (l == r) {determine(l); return;}
int mid1 = floor(double(l * (1.0 - P) + r * P));
int mid2 = floor(double(l * P + r * (1.0 - P)));
if (res <= mid2) {
int Res = ask(l, mid1);
if (res == Res) solve(l, mid1, Res);
else solve(mid1 + 1, r, ask(mid1 + 1, r));
} else {
int Res = ask(mid2 + 1, r);
if (res == Res) solve(mid2 + 1, r, Res);
else solve(l, mid2, ask(l, mid2));
}
}
void work() {
int n;
scanf("%d", &n);
solve(1, n, ask(1, n));
}
int main() {
int t, n;
scanf("%d", &t);
while (t--) work();
return 0;
}
詳細信息
Test #1:
score: 0
Time Limit Exceeded
input:
3 5