QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#845747 | #2567. Hidden Rook | zhenghanyun | AC ✓ | 1064ms | 4744kb | C++14 | 5.0kb | 2025-01-06 18:53:48 | 2025-01-06 18:53:49 |
Judging History
answer
#pragma GCC optimize(0)
#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize("Ofast")
#pragma GCC optimize("inline")
#pragma GCC optimize("-fgcse")
#pragma GCC optimize("-fgcse-lm")
#pragma GCC optimize("-fipa-sra")
#pragma GCC optimize("-ftree-pre")
#pragma GCC optimize("-ftree-vrp")
#pragma GCC optimize("-fpeephole2")
#pragma GCC optimize("-ffast-math")
#pragma GCC optimize("-fsched-spec")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("-falign-jumps")
#pragma GCC optimize("-falign-loops")
#pragma GCC optimize("-falign-labels")
#pragma GCC optimize("-fdevirtualize")
#pragma GCC optimize("-fcaller-saves")
#pragma GCC optimize("-fcrossjumping")
#pragma GCC optimize("-fthread-jumps")
#pragma GCC optimize("-funroll-loops")
#pragma GCC optimize("-freorder-blocks")
#pragma GCC optimize("-fschedule-insns")
#pragma GCC optimize("inline-functions")
#pragma GCC optimize("-ftree-tail-merge")
#pragma GCC optimize("-fschedule-insns2")
#pragma GCC optimize("-fstrict-aliasing")
#pragma GCC optimize("-falign-functions")
#pragma GCC optimize("-fcse-follow-jumps")
#pragma GCC optimize("-fsched-interblock")
#pragma GCC optimize("-fpartial-inlining")
#pragma GCC optimize("no-stack-protector")
#pragma GCC optimize("-freorder-functions")
#pragma GCC optimize("-findirect-inlining")
#pragma GCC optimize("-fhoist-adjacent-loads")
#pragma GCC optimize("-frerun-cse-after-loop")
#pragma GCC optimize("inline-small-functions")
#pragma GCC optimize("-finline-small-functions")
#pragma GCC optimize("-ftree-switch-conversion")
#pragma GCC optimize("-foptimize-sibling-calls")
#pragma GCC optimize("-fexpensive-optimizations")
#pragma GCC optimize("inline-functions-called-once")
#pragma GCC optimize("-fdelete-null-pointer-checks")
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
mt19937_64 rng(chrono::steady_clock().now().time_since_epoch().count());
int T, n, m, x, y, askCnt;
inline int ask(int l1, int r1, int l2, int r2) {
#ifdef LOCAL
++askCnt;
int res = 0;
for (int i = l1; i <= r1; ++i) {
for (int j = l2; j <= r2; ++j) {
if (x == i || y == j) {
++res;
}
}
}
return res;
#else
cout << "? " << l1 << " " << l2 << " " << r1 << " " << r2 << endl;
int res;
cin >> res;
return res;
#endif
}
inline void print_ans(int ansX, int ansY) {
#ifdef LOCAL
assert(ansX == x && ansY == y && askCnt <= 4);
#else
cout << "! " << ansX << " " << ansY << endl;
#endif
}
inline void init() {
n = rng() % 13 + 3, m = rng() % 13 + 3;
x = rng() % n + 1, y = rng() % m + 1;
askCnt = 0;
}
map <pair <vector <pair <int, int> >, pair <int, int> >, pair <pair <int, int>, pair <int, int> > > P;
inline pair <pair <int, int>, pair <int, int> > solve(vector <pair <int, int> > vec) {
int p1 = n, p2 = 1;
for (auto p: vec) {
p1 = min(p1, p.first);
p2 = max(p2, p.first);
}
p1 = max(1, p1 - 1);
p2 = min(p2 + 1, n);
if (P.find(make_pair(vec, make_pair(n, m))) != P.end()) {
return P[make_pair(vec, make_pair(n, m))];
}
int L1 = 1, R1 = 1, L2 = 1, R2 = 1;
ld ans = 0;
for (int l1 = p1; l1 <= p2; ++l1) {
for (int r1 = l1; r1 <= p2; ++r1) {
for (int l2 = 1; l2 <= m; ++l2) {
for (int r2 = l2; r2 <= m; ++r2) {
map <int, int> mp;
for (auto p: vec) {
if (p.first >= l1 && p.first <= r1 && p.second >= l2 && p.second <= r2) {
++mp[r1 - l1 + r2 - l2 + 1];
} else if (p.first >= l1 && p.first <= r1) {
++mp[r2 - l2 + 1];
} else if (p.second >= l2 && p.second <= r2) {
++mp[r1 - l1 + 1];
} else {
++mp[0];
}
}
ld res = 0;
for (auto u: mp) {
ld P = (ld)u.second / vec.size();
res += -log(P) * P;
}
if (res > ans) {
ans = res;
L1 = l1, R1 = r1, L2 = l2, R2 = r2;
}
}
}
}
}
return P[make_pair(vec, make_pair(n, m))] = make_pair(make_pair(L1, R1), make_pair(L2, R2));
}
inline void solve() {
#ifdef LOCAL
init();
#else
cin >> n >> m;
#endif
vector <pair <int, int> > vec;
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= m; ++j) {
vec.emplace_back(make_pair(i, j));
}
}
while (vec.size() > 1) {
pair <pair <int, int>, pair <int, int> > p = solve(vec);
int l1 = p.first.first, r1 = p.first.second, l2 = p.second.first, r2 = p.second.second;
int ans = ask(l1, r1, l2, r2);
vector <pair <int, int> > tmp = vec;
vec.clear();
for (auto p: tmp) {
int res = 0;
if (p.first >= l1 && p.first <= r1 && p.second >= l2 && p.second <= r2) {
res = r1 - l1 + r2 - l2 + 1;
} else if (p.first >= l1 && p.first <= r1) {
res = r2 - l2 + 1;
} else if (p.second >= l2 && p.second <= r2) {
res = r1 - l1 + 1;
} else {
res = 0;
}
if (res == ans) {
vec.emplace_back(p);
}
}
}
print_ans(vec[0].first, vec[0].second);
}
int main() {
#ifdef LOCAL
T = 15000;
#else
cin >> T;
#endif
while (T--) {
solve();
}
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 1ms
memory: 3552kb
input:
2 6 6 4 4 0 7 5 2 3 2
output:
? 1 1 2 3 ? 2 2 3 4 ? 1 1 1 2 ! 2 3 ? 1 1 3 2 ? 1 1 2 3 ? 2 1 3 4 ! 1 4
result:
ok Good (2 test cases)
Test #2:
score: 0
Accepted
time: 16ms
memory: 3700kb
input:
3 15 15 14 8 6 8 3 15 8 11 1 1 15 15 8 3 11 0
output:
? 1 1 7 8 ? 1 5 4 9 ? 1 1 2 6 ? 2 1 3 7 ! 2 7 ? 1 1 2 8 ? 2 1 3 11 ? 1 1 1 13 ? 1 1 1 12 ! 2 12 ? 1 1 7 8 ? 1 1 3 11 ? 3 1 5 9 ? 3 1 4 1 ! 5 9
result:
ok Good (3 test cases)
Test #3:
score: 0
Accepted
time: 135ms
memory: 3876kb
input:
100 6 6 2 2 0 3 4 2 1 7 8 4 0 0 5 6 0 0 0 9 4 4 4 0 11 4 5 2 2 3 15 12 7 3 4 2 5 9 2 4 0 6 7 3 0 4 9 9 8 2 4 0 11 4 5 2 2 3 12 7 4 0 0 0 14 7 0 4 0 1 9 6 0 3 1 12 11 6 0 2 0 3 14 7 10 1 1 15 12 0 13 3 0 7 10 8 0 0 15 5 0 0 4 0 11 9 4 8 5 0 14 7 4 7 1 15 10 0 5 8 0 7 4 3 3 0 5 13 6 9 1 0 13 8 0 4 3 0...
output:
? 1 1 2 3 ? 2 1 4 2 ? 2 1 3 1 ! 4 3 ? 1 1 2 3 ? 2 1 2 1 ! 3 1 ? 1 1 3 4 ? 1 1 2 6 ? 2 1 2 7 ! 3 8 ? 1 1 2 3 ? 2 1 3 4 ? 3 1 4 5 ! 5 6 ? 1 1 4 2 ? 4 2 6 3 ? 4 1 5 1 ! 6 2 ? 1 1 5 2 ? 5 2 8 3 ? 5 1 6 2 ? 6 1 7 2 ! 7 1 ? 1 1 7 6 ? 7 1 11 3 ? 7 1 9 4 ? 7 1 8 5 ! 9 5 ? 1 1 2 4 ? 2 3 3 5 ? 2 1 2 3 ! 3 4 ?...
result:
ok Good (100 test cases)
Test #4:
score: 0
Accepted
time: 119ms
memory: 3760kb
input:
50 9 8 0 3 2 4 11 0 2 0 1 9 11 6 2 7 13 8 4 6 2 4 15 7 0 14 12 8 9 4 0 2 11 12 5 0 0 2 11 14 0 0 0 14 14 14 7 0 6 0 8 3 5 0 2 6 7 6 3 2 4 12 6 2 7 9 6 4 4 4 1 9 15 0 3 0 0 12 7 9 0 2 0 13 14 6 3 0 7 12 11 0 11 2 0 12 13 6 8 2 4 8 5 5 0 3 8 10 5 2 6 13 3 6 0 3 2 8 10 0 7 8 1 15 15 0 11 15 12 8 3 5 4 ...
output:
? 1 1 5 4 ? 5 1 7 6 ? 7 1 8 5 ! 9 5 ? 1 1 2 5 ? 2 1 3 8 ? 3 1 3 6 ? 3 1 3 7 ! 4 7 ? 1 1 4 6 ? 1 1 2 8 ? 2 1 3 7 ! 3 8 ? 1 1 6 4 ? 1 1 3 6 ? 1 1 2 7 ! 3 7 ? 1 1 2 7 ? 2 1 3 11 ? 1 1 2 13 ? 1 1 2 12 ! 1 13 ? 1 1 4 5 ? 4 1 6 2 ? 6 1 7 3 ! 8 3 ? 1 1 5 6 ? 5 1 8 3 ? 8 1 9 4 ? 9 1 10 5 ! 11 5 ? 1 1 5 7 ? ...
result:
ok Good (50 test cases)
Test #5:
score: 0
Accepted
time: 103ms
memory: 3824kb
input:
50 9 14 4 0 2 3 15 4 8 2 2 6 6 3 4 1 10 11 10 4 0 10 3 5 0 2 3 12 13 12 6 4 0 5 15 2 0 2 1 15 9 10 3 3 0 11 7 4 2 0 1 3 8 5 2 4 7 7 6 0 1 12 9 4 8 6 1 3 5 3 0 5 3 4 0 10 12 6 2 0 2 7 3 2 0 0 11 11 6 11 8 0 15 8 10 0 2 0 11 11 0 8 2 1 7 14 7 11 0 9 9 8 4 6 8 7 6 6 0 2 6 6 2 3 3 15 4 8 2 2 9 11 0 4 7 ...
output:
? 1 1 4 7 ? 4 5 6 8 ? 6 3 7 5 ? 7 1 8 3 ! 8 4 ? 1 1 7 2 ? 1 2 3 3 ? 1 1 1 2 ! 1 1 ? 1 1 2 3 ? 2 1 3 4 ? 1 1 1 5 ! 2 5 ? 1 1 5 6 ? 1 1 2 3 ? 2 2 3 4 ! 1 1 ? 1 1 5 2 ? 5 2 7 3 ? 7 1 8 2 ? 8 1 9 2 ! 9 1 ? 1 1 6 7 ? 1 1 3 4 ? 1 3 2 5 ? 2 1 3 3 ! 1 4 ? 1 1 2 7 ? 2 1 3 3 ? 3 1 4 5 ? 4 1 4 4 ! 5 4 ? 1 1 7 ...
result:
ok Good (50 test cases)
Test #6:
score: 0
Accepted
time: 66ms
memory: 3824kb
input:
50 14 14 8 14 0 11 6 3 0 0 0 13 6 0 8 2 1 11 13 7 3 8 1 9 4 5 4 0 10 12 6 2 0 0 3 12 0 0 0 1 12 5 0 3 4 13 4 7 2 1 2 9 9 0 0 8 10 6 0 0 5 3 5 3 4 6 12 8 0 0 0 7 9 0 3 2 10 11 5 3 4 0 8 5 5 3 1 5 4 3 0 7 5 3 4 0 13 4 7 4 0 1 5 14 2 3 0 1 4 13 6 0 11 13 5 13 2 2 3 10 5 0 6 4 9 8 0 3 0 4 12 2 4 1 5 7 2...
output:
? 1 1 7 8 ? 1 1 4 11 ? 1 1 2 9 ? 2 1 3 10 ! 3 10 ? 1 1 3 2 ? 3 1 4 1 ? 4 1 5 1 ! 6 3 ? 1 1 6 3 ? 6 1 9 5 ? 6 1 7 4 ? 7 1 8 1 ! 8 4 ? 1 1 6 7 ? 1 1 3 10 ? 3 1 4 8 ? 3 1 3 9 ! 4 9 ? 1 1 4 2 ? 1 2 2 4 ? 1 1 1 1 ! 2 2 ? 1 1 5 6 ? 1 1 2 9 ? 2 1 3 7 ? 3 1 4 8 ! 5 9 ? 1 1 2 6 ? 2 1 2 9 ? 2 1 2 10 ? 2 1 2 1...
result:
ok Good (50 test cases)
Test #7:
score: 0
Accepted
time: 99ms
memory: 3848kb
input:
50 12 15 0 0 14 0 6 7 4 5 0 10 5 2 2 0 0 11 9 6 4 0 14 5 2 6 0 14 8 0 0 3 0 15 12 6 12 2 1 8 13 9 4 4 1 4 15 2 3 1 0 12 8 0 0 0 1 6 12 0 2 0 1 11 5 6 3 0 0 13 6 3 0 2 1 11 13 0 3 2 0 9 7 7 3 1 5 13 0 2 0 1 5 6 4 2 3 14 7 0 8 0 1 8 10 8 4 0 13 9 9 4 0 10 11 6 0 0 8 10 0 7 8 1 12 6 3 4 6 0 11 13 6 3 0...
output:
? 1 1 6 7 ? 6 1 9 11 ? 9 1 10 13 ? 9 1 9 12 ! 10 13 ? 1 1 3 4 ? 1 1 2 5 ? 2 1 3 6 ! 1 7 ? 1 1 5 2 ? 1 1 2 3 ? 2 1 3 1 ? 3 1 4 1 ! 5 3 ? 1 1 6 4 ? 6 1 8 2 ? 6 2 7 4 ! 8 1 ? 1 1 7 2 ? 1 1 3 4 ? 1 1 2 3 ! 3 4 ? 1 1 7 4 ? 7 4 10 6 ? 10 1 12 7 ? 12 1 13 1 ! 14 7 ? 1 1 7 6 ? 1 1 4 9 ? 1 1 2 7 ? 2 1 3 1 ! ...
result:
ok Good (50 test cases)
Test #8:
score: 0
Accepted
time: 103ms
memory: 3760kb
input:
50 11 11 5 3 0 0 10 11 6 0 11 4 4 0 0 13 12 6 4 2 1 14 9 10 3 0 2 12 5 2 6 4 1 14 13 0 12 8 4 8 0 7 1 14 15 8 3 9 0 14 3 7 4 1 1 13 10 6 4 2 3 14 10 7 5 2 1 9 6 6 2 3 12 9 9 3 4 5 11 0 0 10 10 5 0 3 2 1 12 5 2 3 0 1 12 3 7 2 2 12 5 2 6 4 1 8 14 0 12 8 1 4 15 2 0 0 1 10 6 7 4 2 9 11 4 0 2 3 10 7 5 0 ...
output:
? 1 1 5 6 ? 5 1 8 3 ? 5 1 6 4 ? 6 1 7 5 ! 8 6 ? 1 1 5 6 ? 1 1 3 9 ? 3 1 4 10 ! 4 10 ? 1 1 2 3 ? 2 1 3 1 ! 4 4 ? 1 1 7 6 ? 1 1 4 9 ? 4 1 5 7 ? 5 1 6 1 ! 6 7 ? 1 1 7 4 ? 1 1 3 2 ? 3 2 5 3 ? 5 1 6 2 ! 7 1 ? 1 1 6 2 ? 1 1 3 4 ? 1 1 2 3 ? 1 1 1 1 ! 1 3 ? 1 1 7 6 ? 7 1 10 9 ? 7 1 8 7 ! 8 7 ? 1 1 2 4 ? 2 1...
result:
ok Good (50 test cases)
Test #9:
score: 0
Accepted
time: 83ms
memory: 3704kb
input:
50 9 10 4 0 4 8 7 0 5 0 4 12 7 3 0 0 7 10 5 0 2 14 10 11 3 0 3 3 7 4 0 8 15 7 12 2 8 3 14 7 0 13 12 15 3 9 4 1 0 14 3 7 4 0 0 5 12 2 2 3 4 11 6 2 1 3 10 4 0 3 0 0 10 12 6 10 0 8 11 6 3 2 1 14 7 7 4 0 3 4 12 2 2 1 5 12 0 2 0 1 8 11 8 4 4 0 5 5 2 2 2 5 8 5 2 3 12 8 4 6 2 3 4 3 1 11 10 10 2 0 1 3 4 3 1...
output:
? 1 1 4 5 ? 4 1 7 3 ? 7 1 8 4 ! 8 5 ? 1 1 4 3 ? 4 1 6 5 ? 4 1 5 6 ! 6 7 ? 1 1 2 6 ? 2 1 3 3 ? 1 1 1 4 ? 1 1 1 5 ! 2 6 ? 1 1 4 5 ? 1 1 2 7 ? 2 1 3 8 ! 4 8 ? 1 1 7 5 ? 1 1 3 2 ? 3 2 5 3 ? 5 1 6 2 ! 6 1 ? 1 1 2 3 ? 2 2 3 4 ! 1 1 ? 1 1 4 7 ? 1 1 2 11 ? 2 1 3 9 ? 1 1 2 8 ! 1 9 ? 1 1 2 7 ? 2 1 3 10 ? 1 1 ...
result:
ok Good (50 test cases)
Test #10:
score: 0
Accepted
time: 1ms
memory: 3624kb
input:
16 3 3 1 1 3 3 2 1 3 3 3 1 1 3 3 0 1 3 3 2 2 3 3 2 1 2 3 3 1 2 2 3 3 1 0 3 3 0 0 3 4 4 4 1 3 4 4 4 0 4 3 4 4 1 4 3 4 4 0 4 3 4 0 4 4 4 4 1 4 4 0 0
output:
? 1 1 1 2 ? 1 1 2 1 ! 2 2 ? 1 1 1 2 ? 1 1 2 1 ? 1 1 2 2 ! 1 2 ? 1 1 1 2 ? 1 1 2 1 ! 2 2 ? 1 1 1 2 ? 1 1 2 1 ! 2 3 ? 1 1 1 2 ? 1 1 2 1 ! 1 1 ? 1 1 1 2 ? 1 1 2 1 ? 1 1 2 2 ! 1 3 ? 1 1 1 2 ? 1 1 2 1 ? 1 1 2 2 ! 3 1 ? 1 1 1 2 ? 1 1 2 1 ! 3 2 ? 1 1 1 2 ? 1 1 2 1 ! 3 3 ? 1 1 2 3 ? 2 2 3 4 ? 1 1 1 2 ! 2 2 ...
result:
ok Good (16 test cases)
Test #11:
score: 0
Accepted
time: 1064ms
memory: 4744kb
input:
15000 12 8 6 4 0 2 12 15 7 11 13 2 3 9 0 0 0 0 11 10 10 4 3 1 3 14 2 1 1 11 9 9 3 4 14 4 7 2 2 3 8 5 0 4 0 11 10 5 0 0 10 8 9 4 2 2 5 12 2 0 0 0 13 9 9 4 3 2 7 13 3 3 4 0 12 12 5 0 0 6 15 9 4 3 3 1 12 12 6 0 2 0 9 10 5 8 6 9 15 7 2 2 0 12 14 12 0 0 2 5 4 0 4 15 9 4 6 0 0 14 7 7 5 2 1 8 15 4 0 0 1 14...
output:
? 1 1 6 4 ? 6 1 9 2 ? 9 2 10 4 ? 10 1 11 2 ! 12 1 ? 1 1 6 7 ? 1 1 3 11 ? 1 1 2 13 ? 2 1 3 14 ! 1 14 ? 1 1 2 4 ? 2 1 2 6 ? 2 1 2 7 ? 2 1 2 8 ! 3 9 ? 1 1 6 5 ? 1 1 3 2 ? 1 2 2 4 ? 1 1 1 2 ! 2 1 ? 1 1 2 7 ? 2 1 2 3 ? 2 1 2 1 ! 3 1 ? 1 1 6 4 ? 1 1 3 2 ? 3 2 4 4 ! 4 2 ? 1 1 7 2 ? 7 2 10 3 ? 7 1 8 2 ? 8 1...
result:
ok Good (15000 test cases)