Submission #1127602

#TimeUsernameProblemLanguageResultExecution timeMemory
1127602LudisseyWorm Worries (BOI18_worm)C++20
10 / 100
3 ms436 KiB
#include <bits/stdc++.h> #define sz(a) (int)a.size() #define all(a) a.begin(), a.end() using namespace std; vector<int> a; map<pair<int,pair<int,int>>,int> req; int n,m,k,q; void give_ans(int x, int y, int z){ cout << "! " << x+1 << " " << y+1 << " " << z+1 << endl; return; } int ask(int x, int y, int z){ if(req.find({x,{y,z}})!=req.end()) return req[{x,{y,z}}]; if(x<0||x>=n||y<0||y>=m||z<0||z>=k) return -1e9; cout << "? " << x+1 << " " << y+1 << " " << z+1 << endl; int ans; cin>>ans; req[{x,{y,z}}]=ans; return ans; } int linemax(int y){ int l=0; int r=n-1; while(l<r){ int mid1=l+(r-l)/3; int mid2=r-(r-l)/3; int amid1=ask(mid1,y,0); int amid2=ask(mid2,y,0); if(amid1<amid2){ l=mid1+1; }else{ r=mid2-1; } } return l; } signed main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cin >> n >> m >> k >> q; int l=0; int r=m-1; while(l<r){ int mid1=l+(r-l)/3; int mid2=r-(r-l)/3; int amid1=linemax(mid1); int amid2=linemax(mid2); if(amid1<amid2){ l=mid1+1; }else{ r=mid2-1; } } give_ans(linemax(l),l,0); return 0; }
#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...