Submission #470080

#TimeUsernameProblemLanguageResultExecution timeMemory
470080OzyWorm Worries (BOI18_worm)C++17
31 / 100
51 ms3012 KiB
#include <iostream> #include <bits/stdc++.h> using namespace std; #define rep(i,a,b) for (int i = (a); i <= (b); i++) #define repa(i,a,b) for (int i = (a); i >= (b); i--) #define lli long long int #define debug(a) cout << #a << " = " << a << endl #define debugsl(a) cout << #a << " = " << a << ", " #define MAX 1000 lli n,m,k,q; pair<lli,lli> res; lli dir[8] = {-1,0,1,0,0,1,0,-1}; lli arr[MAX+2][MAX+2]; lli query(lli x, lli y) { cout << "? " << x << ' ' << y << " 1" << endl; lli a; cin >> a; return a; } pair<lli,lli> checa(pair<lli,lli> coord) { lli sector,val = arr[coord.first][coord.second]; pair<lli,lli> nuevo; rep(i,0,3) { nuevo = coord; nuevo.first += dir[i]; nuevo.second += dir[i+4]; if (nuevo.first == 0 || nuevo.first == n+1) continue; if (nuevo.second == 0 || nuevo.second == m+1) continue; if (arr[nuevo.first][nuevo.second] == 0) arr[nuevo.first][nuevo.second] = query(nuevo.first, nuevo.second); if (arr[nuevo.first][nuevo.second] > val) { val = arr[nuevo.first][nuevo.second]; sector = i; } } if (val == arr[coord.first][coord.second]) return{-1,0}; return {val,sector}; } pair<lli,lli> binaria(lli ini,lli fin, lli l, lli r, pair<lli,lli> ant, lli num) { lli mitad,mayor = 0; pair<lli,lli> coord; if (ini == fin && r == l) return {ini,r}; lli a,b; mitad = (ini+fin)/2; if (num == 1) b = mitad; else a = mitad; rep(i,l,r) { if (num == 1) a = i; else b = i; if (arr[a][b] == 0) arr[a][b] = query(a,b); if (arr[a][b] > mayor) { mayor = arr[a][b]; coord = {a,b}; } } pair<lli,lli> x = checa(coord); if (x.first == -1) return coord; lli nuevo = num^1; if (arr[coord.first][coord.second] >= arr[ant.first][ant.second]) { if (x.second == 0 || x.second == 3) fin = mitad - 1; else ini = mitad + 1; return binaria(l,r,ini,fin,coord,nuevo); } else { if (num == 1) { if (ant.second > mitad) ini = mitad + 1; else fin = mitad-1; } else { if (ant.first > mitad) ini = mitad + 1; else fin = mitad-1; } return binaria(l,r,ini,fin,ant,nuevo); } } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> n >> m >> k >> q; res = binaria(1,n,1,m,{0,0},0); cout << "! " << res.first << ' ' << res.second << " 1"; }

Compilation message (stderr)

worm.cpp: In function 'std::pair<long long int, long long int> checa(std::pair<long long int, long long int>)':
worm.cpp:47:23: warning: 'sector' may be used uninitialized in this function [-Wmaybe-uninitialized]
   47 |     return {val,sector};
      |                       ^
worm.cpp: In function 'std::pair<long long int, long long int> binaria(long long int, long long int, long long int, long long int, std::pair<long long int, long long int>, long long int)':
worm.cpp:68:46: warning: 'b' may be used uninitialized in this function [-Wmaybe-uninitialized]
   68 |         if (arr[a][b] == 0) arr[a][b] = query(a,b);
      |                                         ~~~~~^~~~~
worm.cpp:68:46: warning: 'a' may be used uninitialized in this function [-Wmaybe-uninitialized]
#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...