Submission #537272

#TimeUsernameProblemLanguageResultExecution timeMemory
537272surguttiWorm Worries (BOI18_worm)C++14
0 / 100
911 ms336 KiB
#include <bits/stdc++.h> using namespace std; vector<int> p{0, 1, 2}; int get(vector<int> pos) { cout << "? " << pos[p[0]] << ' ' << pos[p[1]] << ' ' << pos[p[2]] << endl; int h; cin >> h; return h; } void rek(vector<pair<int, int>> a) { sort(p.begin(), p.end(), [&a](int i, int j) { return a[i].second - a[i].first > a[j].second - a[j].first; }); int max_val = -1; vector<int> max_pos; if (a[0].second - a[0].first == 2) { for (int i = a[0].first; i <= a[0].second; i++) { for (int j = a[1].first; j <= a[1].second; j++) { for (int k = a[2].first; k <= a[2].second; k++) { int cur_val = get({i, j, k}); if (cur_val > max_val) { max_val = cur_val; max_pos = {i, j, k}; } } } } cout << "! " << max_pos[p[0]] << ' ' << max_pos[p[1]] << ' ' << max_pos[p[2]] << '\n'; return; } int m = (a[0].first + a[0].second) >> 1; for (int i = a[1].first; i <= a[1].second; i++) { for (int j = a[2].first; j <= a[2].second; j++) { int cur_val = get({m, i, j}); if (cur_val > max_val) { max_val = cur_val; max_pos = {m, i, j}; } } } vector<int> L_pos = max_pos; vector<int> R_pos = max_pos; L_pos[0]--; R_pos[0]++; if (get(L_pos) < get(R_pos)) { a[0].first = m; } else { a[0].second = m; } rek(a); } int main() { ios::sync_with_stdio(false), cin.tie(nullptr); int n, m, k, q; cin >> n >> m >> k >> q; rek({{1, n}, {1, m}, {1, k}}); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...