QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#884469 | #9734. Identify Chord | Estelle_N | WA | 5ms | 1664kb | C++14 | 2.0kb | 2025-02-06 08:39:08 | 2025-02-06 08:39:08 |
Judging History
answer
#include <cstdio>
#include <algorithm>
using namespace std;
int T, n;
int ask(int x, int y, int z = 0)
{
printf("? %d %d\n", x, y);
fflush(stdout);
scanf("%d", &z);
return z;
}
void ans(int x, int y, int z = 0)
{
printf("! %d %d\n", x, y);
fflush(stdout);
scanf("%d", &z);
}
int dis(int x, int y)
{
if(x > y)
swap(x, y);
return min(y - x, x + n - y);
}
int move(int u, int k)
{
u = ((u + k) % n + n) % n;
return u == 0 ? n : u;
}
void work()
{
scanf("%d", &n);
if(n <= 8)
{
for(int i = 1; i <= n; ++ i)
for(int j = i + 2; j <= n; ++ j)
if(!(i == 1 && j == n) && ask(i, j) == 1)
return ans(i, j);
}
int u = 1, v = n / 2 + 1, w = n / 2, d = ask(u, v);
while(d == w)
{
if(n & 1)
{
if(v - u == n / 2)
++ v;
else
++ u;
}
else
++ u, ++ v;
d = ask(u, v);
}
if(d == 1)
return ans(u, v);
int delta = w - d, flag = 0;
if(ask(u, move(u, delta + 1)) == 1)
return ans(u, move(u, delta + 1));
if(ask(u, move(u, - delta - 1)) == 1)
return ans(u, move(u, - delta - 1));
int x = u + 1, y = v, z = dis(x, y), k = ask(x, y);
if(k == 1)
return ans(x, y);
if(z - k >= delta)
flag = 1, w = v - u, delta = w - d;
else
flag = -1, w = n - v + u, delta = w - d;
int l = 0, r = w;
while(l <= r)
{
int mid = l + r >> 1, p = move(u, flag * mid);
if(dis(p, v) - ask(p, v) >= delta)
l = mid + 1, x = p;
else
r = mid - 1;
}
y = move(x, flag * (delta + 1));
if(ask(x, y) != 1)
y = move(v, flag * (ask(x, v) - 1));
ans(x, y);
}
int main()
{
scanf("%d", &T);
while(T --)
work();
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 1664kb
input:
2 6 2 2 2 1 1 4 1 1
output:
? 1 3 ? 1 4 ? 1 5 ? 2 4 ! 2 4 ? 1 3 ! 1 3
result:
ok ok (2 test cases)
Test #2:
score: -100
Wrong Answer
time: 5ms
memory: 1664kb
input:
1000 15 5 3 3 4 2 2 1 1 1 19 5 5 5 4 5 4 3 4 5 3 1 17 5 4 4 4 4 4 3 4 4 3 1 15 6 1 1 14 5 3 3 4 4 4 5 1 1 15 3 5 4 2 4 2 3 3 2 1 17 8 8 8 7 2 2 6 5 6 5 4 3 4 1 20 6 1 1 13 5 2 2 5 2 2 3 3 2 1 18 3 5 3 4 5 2 3 1 1 13 4 3 3 5 4 3 4 1 1 14 2 3 3 3 3 1 2 1 1 17 8 7 2 2 6 3 2 2 3 3 2 1 12 5 2 2 4 3 4 3 2...
output:
? 1 8 ? 1 4 ? 1 13 ? 2 8 ? 4 8 ? 6 8 ? 5 8 ? 5 8 ! 5 8 ? 1 10 ? 1 6 ? 1 15 ? 2 10 ? 5 10 ? 2 10 ? 3 10 ? 4 10 ? 3 8 ? 3 10 ! 3 12 ? 1 9 ? 1 5 ? 1 14 ? 2 9 ? 5 9 ? 2 9 ? 3 9 ? 4 9 ? 3 7 ? 3 9 ! 3 11 ? 1 8 ? 1 3 ! 1 3 ? 1 8 ? 1 4 ? 1 12 ? 2 8 ? 4 8 ? 2 8 ? 3 8 ? 2 5 ! 2 5 ? 1 8 ? 1 6 ? 1 11 ? 2 8 ? 4 ...
result:
wrong answer Wrong answer n=19, actual=7-19, guessed=2-5 (test case 29)