#include <bits/stdc++.h>
using namespace std;
mt19937 rd(20030101);
int n, m, k, q;
map<tuple<int, int, int>, int> height;
int genInt(int left, int right)
{
return left + abs(int(rd())) % (right - left + 1);
}
int ask(int x, int y, int z)
{
if (height.find(make_tuple(x, y, z)) != height.end())
{
return height[make_tuple(x, y, z)];
}
cout << "? " << x << ' ' << y << ' ' << z << endl;
int result;
cin >> result;
height[make_tuple(x, y, z)] = result;
return result;
}
void answer(int x, int y, int z)
{
cout << "! " << x << ' ' << y << ' ' << z << endl;
}
void subtask1()
{
double phi = (1 + sqrt(5)) / 2;
int left = 0, right = n + 1;
int mid = left + int((right - left - 1) / phi) + 1;
int val = ask(mid, 1, 1);
while (right - left > 2)
{
if (mid - left > right - mid)
{
int mid_ = left + int((mid - left - 1) / phi) + 1;
int val_ = ask(mid_, 1, 1);
if (val < val_)
{
right = mid;
mid = mid_;
val = val_;
}
else
{
left = mid_;
}
}
else
{
int mid_ = right - int((right - mid - 1) / phi) - 1;
int val_ = ask(mid_, 1, 1);
if (val < val_)
{
left = mid;
mid = mid_;
val = val_;
}
else
{
right = mid_;
}
}
}
answer(mid, 1, 1);
}
void solve(int i1, int j1, int i2, int j2, int i3, int j3, int a3, int flip)
{
int i, j, j_, a_;
i = (i1 + i2) / 2;
j_ = a_ = -1;
for (j = j1; j <= j2; j++)
{
int a = !flip ? ask(i, j, 1) : ask(j, i, 1);
if (a_ < a)
a_ = a, j_ = j;
}
if (a_ < a3)
{
if (i3 < i)
solve(j1, i1, j2, i - 1, j3, i3, a3, flip ^ 1);
else
solve(j1, i + 1, j2, i2, j3, i3, a3, flip ^ 1);
}
else if (i > i1 && a_ < (!flip ? ask(i - 1, j_, 1) : ask(j_, i - 1, 1)))
solve(j1, i1, j2, i - 1, j_, i, a_, flip ^ 1);
else if (i < i2 && a_ < (!flip ? ask(i + 1, j_, 1) : ask(j_, i + 1, 1)))
solve(j1, i + 1, j2, i2, j_, i, a_, flip ^ 1);
else if (!flip)
answer(i, j_, 1);
else
answer(j_, i, 1);
}
void subtask2()
{
solve(1, 1, n, m, -1, -1, -1, 0);
}
const int dx[6] = {1, -1, 0, 0, 0, 0};
const int dy[6] = {0, 0, 1, -1, 0, 0};
const int dz[6] = {0, 0, 0, 0, 1, -1};
bool check(int x, int y, int z)
{
return (x > 0 && x <= n && y > 0 && y <= m && z > 0 && z <= k);
}
void subtask3()
{
int x, y, z, a = -1;
for (int i = 1; i <= q / 2; i++)
{
int nx = genInt(1, n), ny = genInt(1, m), nz = genInt(1, k);
int na = ask(nx, ny, nz);
if (a < na)
{
a = na;
x = nx;
y = ny;
z = nz;
}
}
while (true)
{
bool flag = false;
for (int i = 0; i < 6; i++)
{
int nx = x + dx[i], ny = y + dy[i], nz = z + dz[i];
if (check(nx, ny, nz))
{
int na = ask(nx, ny, nz);
if (a < na)
{
a = na;
x = nx;
y = ny;
z = nz;
flag = true;
break;
}
}
}
if (!flag)
{
break;
}
}
answer(x, y, z);
}
int main()
{
cin >> n >> m >> k >> q;
if (m == 1 && k == 1)
{
subtask1();
}
else if (k == 1)
{
subtask2();
}
else
{
subtask3();
}
return 0;
}
Compilation message
worm.cpp: In function 'void subtask3()':
worm.cpp:159:11: warning: 'z' may be used uninitialized in this function [-Wmaybe-uninitialized]
159 | answer(x, y, z);
| ~~~~~~^~~~~~~~~
worm.cpp:159:11: warning: 'y' may be used uninitialized in this function [-Wmaybe-uninitialized]
worm.cpp:159:11: warning: 'x' may be used uninitialized in this function [-Wmaybe-uninitialized]
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
208 KB |
Output is correct |
2 |
Correct |
1 ms |
208 KB |
Output is correct |
3 |
Correct |
1 ms |
292 KB |
Output is correct |
4 |
Correct |
1 ms |
208 KB |
Output is correct |
5 |
Correct |
1 ms |
208 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
208 KB |
Output is correct |
2 |
Correct |
1 ms |
208 KB |
Output is correct |
3 |
Correct |
1 ms |
208 KB |
Output is correct |
4 |
Correct |
1 ms |
208 KB |
Output is correct |
5 |
Correct |
1 ms |
208 KB |
Output is correct |
6 |
Correct |
1 ms |
208 KB |
Output is correct |
7 |
Correct |
1 ms |
208 KB |
Output is correct |
8 |
Correct |
1 ms |
208 KB |
Output is correct |
9 |
Correct |
1 ms |
208 KB |
Output is correct |
10 |
Correct |
1 ms |
208 KB |
Output is correct |
11 |
Correct |
1 ms |
208 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
3 ms |
208 KB |
Output is correct |
2 |
Correct |
7 ms |
336 KB |
Output is correct |
3 |
Correct |
2 ms |
208 KB |
Output is correct |
4 |
Correct |
7 ms |
336 KB |
Output is correct |
5 |
Correct |
6 ms |
308 KB |
Output is correct |
6 |
Correct |
4 ms |
208 KB |
Output is correct |
7 |
Correct |
5 ms |
336 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
11 ms |
336 KB |
Output is correct |
2 |
Correct |
27 ms |
364 KB |
Output is correct |
3 |
Correct |
9 ms |
348 KB |
Output is correct |
4 |
Correct |
19 ms |
452 KB |
Output is correct |
5 |
Correct |
28 ms |
488 KB |
Output is correct |
6 |
Correct |
27 ms |
612 KB |
Output is correct |
7 |
Correct |
27 ms |
356 KB |
Output is correct |
8 |
Correct |
31 ms |
448 KB |
Output is correct |
9 |
Correct |
25 ms |
404 KB |
Output is correct |
10 |
Correct |
34 ms |
356 KB |
Output is correct |
11 |
Correct |
25 ms |
352 KB |
Output is correct |
12 |
Correct |
25 ms |
420 KB |
Output is correct |
13 |
Correct |
27 ms |
456 KB |
Output is correct |
14 |
Correct |
30 ms |
456 KB |
Output is correct |
15 |
Correct |
30 ms |
340 KB |
Output is correct |
16 |
Correct |
30 ms |
444 KB |
Output is correct |
17 |
Correct |
27 ms |
452 KB |
Output is correct |
18 |
Correct |
27 ms |
440 KB |
Output is correct |
19 |
Correct |
30 ms |
444 KB |
Output is correct |
20 |
Correct |
17 ms |
364 KB |
Output is correct |
21 |
Correct |
28 ms |
388 KB |
Output is correct |
22 |
Correct |
29 ms |
348 KB |
Output is correct |
23 |
Correct |
27 ms |
400 KB |
Output is correct |
24 |
Correct |
21 ms |
456 KB |
Output is correct |
25 |
Correct |
27 ms |
352 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
373 ms |
3256 KB |
Output is correct |
2 |
Correct |
368 ms |
3332 KB |
Output is correct |
3 |
Correct |
406 ms |
3280 KB |
Output is correct |
4 |
Correct |
440 ms |
3548 KB |
Output is correct |
5 |
Correct |
381 ms |
3376 KB |
Output is correct |
6 |
Correct |
438 ms |
3436 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
677 ms |
4892 KB |
Output is correct |
2 |
Correct |
600 ms |
5004 KB |
Output is correct |
3 |
Correct |
639 ms |
4980 KB |
Output is correct |
4 |
Correct |
565 ms |
5108 KB |
Output is correct |
5 |
Correct |
727 ms |
5664 KB |
Output is correct |
6 |
Correct |
597 ms |
5332 KB |
Output is correct |
7 |
Correct |
690 ms |
5360 KB |
Output is correct |
8 |
Correct |
703 ms |
5736 KB |
Output is correct |
9 |
Correct |
480 ms |
4980 KB |
Output is correct |
10 |
Correct |
789 ms |
5796 KB |
Output is correct |
11 |
Correct |
680 ms |
5112 KB |
Output is correct |