QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#886417 | #9734. Identify Chord | 0x3f | WA | 1ms | 3584kb | C++14 | 1.6kb | 2025-02-07 02:37:23 | 2025-02-07 02:37:24 |
Judging History
answer
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll n;
map<pair<int, int>, int> mp;
ll qry(int u, int v, bool flip) {
if(flip) u = n - u % n, v = n - v % n;
u = (u - 1) % n + 1, v = (v - 1) % n + 1;
if(mp.count({u, v})) return mp[{u, v}];
cout << "? " << u << " " << v << endl;
ll ret; cin >> ret; mp[{u, v}] = ret;
return ret;
}
void slv() {
mp.clear(), cin >> n;
ll mid = n / 2, u = 1, v = mid + 1, cur = 0;
bool flip = false;
while((cur = qry(u, v, flip)) == mid)
if(n & 1) {
if(u + mid < v) u++;
else v++;
} else if(n % 2 == 0) u++, v++;
if(qry(u, v + 1, flip) == cur - 1) {
flip = true;
u = n - u;
v = 2 * n - v;
}
ll l = u, r = v;
while(l <= r) {
ll t = (l + r) >> 1;
if(qry(u, t, flip) == cur - v + t) r = t - 1;
else l = t + 1;
}
cur -= v - l + 1;
if(qry(n + u - cur, l, flip) == 1) {
ll ansu = n + u - cur, ansv = l;
if(flip) ansu = n - u % n, ansv = n - v % n;
ansu = (ansu - 1) % n + 1, ansv = (ansv - 1) % n + 1;
cout << "! " << ansu << " " << ansv << endl;
ll ret; cin >> ret;
} else {
ll ansu = u + cur, ansv = l;
if(flip) ansu = n - u % n, ansv = n - v % n;
ansu = (ansu - 1) % n + 1, ansv = (ansv - 1) % n + 1;
cout << "! " << ansu << " " << ansv << endl;
ll ret; cin >> ret;
}
return ;
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
int tc; cin >> tc;
while(tc --) slv();
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 1ms
memory: 3584kb
input:
2 6 2 2 1 2 2 1 4 1 1 1 1
output:
? 1 4 ? 1 5 ? 1 2 ? 1 3 ? 6 4 ! 2 4 ? 1 3 ? 1 4 ? 1 2 ! 1 3
result:
ok ok (2 test cases)
Test #2:
score: -100
Wrong Answer
time: 1ms
memory: 3584kb
input:
1000 15 5 6 3 5 6 4 1 19 5 4 5 3 5 4 1 -1
output:
? 1 8 ? 1 9 ? 1 4 ? 1 6 ? 1 7 ? 12 8 ! 5 8 ? 1 10 ? 1 11 ? 1 15 ? 1 12 ? 1 14 ? 1 13 ? 3 12 ! 1 10
result:
wrong answer Wrong answer n=19, actual=3-12, guessed=1-10 (test case 2)