QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#883308 | #9734. Identify Chord | K8He | WA | 1ms | 3584kb | C++14 | 2.2kb | 2025-02-05 15:45:43 | 2025-02-05 15:45:45 |
Judging History
answer
#include <bits/stdc++.h>
#define _for(i, a, b) for (int i = a; i <= b; ++i)
#define for_(i, a, b) for (int i = a; i >= b; --i)
#define far(i, vec) for (auto i : vec)
#define bdmd int mid = (l + r) >> 1
typedef long double ldb;
typedef long long ll;
typedef double db;
typedef std::pair <int, int> pii;
typedef std::pair <ll, ll> pll;
const int N = 1e5 + 10, P = 998244353;
namespace IO {
int rnt () {
int x = 0, w = 1; char c = getchar ();
while (!isdigit (c)) { if (c == '-') w = -1; c = getchar (); }
while (isdigit (c)) x = (x << 3) + (x << 1) + (c ^ 48), c = getchar ();
return x * w;
}
} // namespace IO
namespace SOLVE {
using namespace IO;
int n, a[N], ans;
int Que (int u, int v) {
std::cout << "? " << u + 1 << " " << v + 1 << std::endl;
int dist; std::cin >> dist;
return dist;
}
void Ans (int u, int v) {
std::cout << "! " << u + 1 << " " << v + 1 << std::endl;
int corr; std::cin >> corr;
return;
}
int Dis (int u, int v) {
int d = std::abs (u - v);
return std::min (d, n - d);
}
void Main () {
std::cin >> n;
int S = 0, T = n / 2, D = Que (S, T);
while (Dis (S, T) == D) {
if (!(n & 1))
++S, ++T;
else {
if (T - S == n / 2)
++T;
else
++S;
}
S %= n, T %= n, D = Que (S, T);
}
int p = (T + n - 1) % n, pd = Que (S, p);
int q = (T + 1) % n, qd = Que (S, q);
if (pd != Dis (S, p) && pd < D) {
int L = S, R = p;
while (L <= R) {
int mid = (L + R) / 2;
if (T - mid == D - Que (S, mid))
R = mid - 1;
else
L = mid + 1;
}
D -= T - L + 1;
Ans (S + D, L);
}
else if (qd != Dis (S, q) && qd < D) {
int L = q, R = S + n;
while (L <= R) {
int mid = (L + R) / 2;
if (mid - T == D - Que (S, mid % n))
L = mid + 1;
else
R = mid - 1;
}
D -= R - T + 1;
Ans ((S + n - D) % n, R % n);
}
else {
--D;
if (D == 0)
Ans (S, T);
else if (Que (S + D, T) == 1 && Dis (S + D, T) != 1)
Ans (S + D, T);
else
Ans ((S + n - D)%n, T);
}
return;
}
}
int main () {
std::ios::sync_with_stdio (false);
std::cin.tie (0), std::cout.tie (0);
int T;
std::cin >> T;
while (T--)
SOLVE::Main ();
return 0;
} /*
*/
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 3584kb
input:
2 6 2 2 2 1 1 4 1 1 1 1
output:
? 1 4 ? 1 3 ? 1 5 ? 2 4 ! 2 4 ? 1 3 ? 1 2 ? 1 4 ! 1 3
result:
ok ok (2 test cases)
Test #2:
score: -100
Wrong Answer
time: 1ms
memory: 3456kb
input:
1000 15 5 6 6 1 1 19 5 6 4 5 3 4 -1
output:
? 1 8 ? 1 7 ? 1 9 ? 5 8 ! 5 8 ? 1 10 ? 1 9 ? 1 11 ? 1 15 ? 1 12 ? 1 13 ! 18 12
result:
wrong answer Wrong answer n=19, actual=3-12, guessed=18-12 (test case 2)