QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#613188 | #8939. Permutation | nekoyellow | WA | 1ms | 3636kb | C++23 | 1.2kb | 2024-10-05 13:43:29 | 2024-10-05 13:43:30 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
int query(int l, int r) {
cout << "? " << l << ' ' << r << endl;
int res;
cin >> res;
return res;
}
void solve() {
int n;
cin >> n;
int l = 1, r = n;
int k = query(1, n);
while (r-l > 1) {
if (k < (l+r)/2) {
int m = l + max((r-l)/3*2, 1);
if (k <= m) {
int nk = query(l, m);
if (k == nk) r = m;
else l = m+1, k = nk;
} else {
l += max((r-l)/3, 1);
k = query(l, r);
}
} else {
int m = r - max((r-l)/3*2, 1);
if (k >= m) {
int nk = query(m, r);
if (k == nk) l = m;
else r = m-1, k = nk;
} else {
r -= max((r-l)/3, 1);
k = query(l, r);
}
}
}
if (l == r) {
cout << "! " << l << endl;
} else {
cout << "! " << (l == k ? r : l) << endl;
}
}
int main() {
cin.tie(0)->sync_with_stdio(0);
int t;
cin >> t;
for (; t; t--) solve();
return 0;
}
詳細信息
Test #1:
score: 0
Wrong Answer
time: 1ms
memory: 3636kb
input:
3 5 3 3 3 6 6 5 3
output:
? 1 5 ? 3 5 ? 3 4 ! 4 ? 1 6 ? 4 6 ? 2 3 ! 1
result:
wrong answer Wrong prediction (test case 2)