QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#883285 | #9734. Identify Chord | KXG | WA | 0ms | 3840kb | C++14 | 2.8kb | 2025-02-05 15:38:18 | 2025-02-05 15:38:18 |
Judging History
answer
#include <cstdio>
#include <algorithm>
#include <map>
#include <cstdlib>
using namespace std;
int t, n;
map<pair<int, int>, int> mp;
int dis(int a, int b) {
if (a < b) {
return b - a;
} else {
return n + b - a;
}
}
int dist(int a, int b) {
return min(dis(a, b), dis(b, a));
}
int query(int a, int b) {
if (mp.count({a, b})) {
return mp[{a, b}];
}
printf("? %d %d\n", a, b);
fflush(stdout);
int x;
scanf("%d", &x);
return mp[{a, b}] = x;
}
void output(int a, int b) {
printf("! %d %d\n", a, b);
fflush(stdout);
int x;
scanf("%d", &x);
if (x == -1) {
exit(0);
}
return;
}
int normal(int a) {
a = (a % n + n) % n;
if (a == 0) {
a = n;
}
return a;
}
int main() {
scanf("%d", &t);
while (t--) {
mp.clear();
scanf("%d", &n);
int u, v, x;
if (n % 2 == 0) {
u = 1;
while (true) {
v = normal(u + n / 2);
x = query(u, v);
if (x < dist(u, v)) {
break;
}
u = normal(u + 1);
}
} else {
u = 1;
while (true) {
v = normal(u + n / 2);
x = query(u, v);
if (x < dist(u, v)) {
break;
}
v = normal(u + n / 2 + 1);
x = query(u, v);
if (x < dist(u, v)) {
break;
}
u = normal(u + 1);
}
}
int d = dist(u, v) - x;
int xnext = query(normal(u + 1), v);
int l, r, ans = 0;
if (xnext == x - 1) {
l = u, r = v - 1;
if (v < u) {
r += n;
}
while (l <= r) {
int mid = (l + r) >> 1;
if (dist(normal(mid), v) - query(normal(mid), v) == d) {
l = mid + 1;
ans = normal(mid);
} else {
r = mid - 1;
}
}
} else {
l = v + 1, r = u;
if (v > u) {
r += n;
}
while (l <= r) {
int mid = (l + r) >> 1;
if (dist(normal(mid), v) - query(normal(mid), v) == d) {
r = mid - 1;
ans = normal(mid);
} else {
l = mid + 1;
}
}
}
x = query(ans, v) - 1;
if (query(ans, normal(v - x)) == 1) {
output(ans, normal(v - x));
} else {
output(ans, normal(v + x));
}
}
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 0ms
memory: 3840kb
input:
2 6 2 1 1 1 4 1 1 1 1
output:
? 1 4 ? 2 4 ? 3 4 ! 2 4 ? 1 3 ? 2 3 ? 4 3 ! 1 3
result:
ok ok (2 test cases)
Test #2:
score: -100
Wrong Answer
time: 0ms
memory: 3840kb
input:
1000 15 5 4 2 2 1 1 19 5 4 5 3 4 5 1 17 5 4 4 3 4 1 15 6 6 4 6 7 1 1 14 5 4 4 5 1 1 15 3 2 4 3 3 1 17 8 8 8 7 6 5 3 -1
output:
? 1 8 ? 2 8 ? 4 8 ? 6 8 ? 5 8 ! 5 8 ? 1 10 ? 2 10 ? 5 10 ? 3 10 ? 4 10 ? 3 8 ! 3 12 ? 1 9 ? 2 9 ? 4 9 ? 3 9 ? 3 7 ! 3 11 ? 1 8 ? 2 8 ? 12 8 ? 14 8 ? 15 8 ? 1 3 ! 1 3 ? 1 8 ? 2 8 ? 4 8 ? 3 8 ? 2 5 ! 2 5 ? 1 8 ? 2 8 ? 4 8 ? 3 8 ? 2 7 ! 2 9 ? 1 9 ? 1 10 ? 2 10 ? 2 11 ? 3 11 ? 6 11 ? 2 5 ! 2 17
result:
wrong answer Wrong answer n=17, actual=5-14, guessed=2-17 (test case 7)