제출 #441584

#제출 시각아이디문제언어결과실행 시간메모리
441584Haruto810198Worm Worries (BOI18_worm)C++17
0 / 100
483 ms992488 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define double long double #define FOR(i, l, r, d) for(int i=(l); i<=(r); i+=(d)) #define szof(x) ((int)(x).size()) #define vi vector<int> #define pii pair<int,int> #define F first #define S second #define pb push_back #define eb emplace_back #define mkp make_pair const int INF = 2147483647; const int LNF = INF*INF; const int MOD = 1000000007; const int mod = 998244353; const double phi = (sqrt(5) + 1) / 2.0; //#pragma GCC optimize("Ofast") //#pragma GCC optimize("unroll-loops") int X, Y, Z; int Q; vector<vector<vi>> arr; int query(int x, int y, int z){ int ret; if(x<=0 or x>=X+1 or y<=0 or y>=Y+1 or z<=0 or z>=Z+1){ return 0; } if(Q == 0){ return -1; } if(arr[x][y][z] == 0){ Q--; cout<<"? "<<x<<" "<<y<<" "<<z<<endl; cin>>ret; arr[x][y][z] = ret; } else{ ret = arr[x][y][z]; } return ret; } int solve_1D(int L, int R, int mid){ if(L == R) return L; assert(L < R); int ml = L + (R-L) * (2-phi); int mr = L + (R-L) * (phi-1); assert(ml <= mr); if( mid*2 < L+R ){ ml = mid; } else{ mr = mid; } assert(ml <= mr); int vl = query(ml, 1, 1); int vr = query(mr, 1, 1); if(vl > vr){ return solve_1D(L, mr - 1, ml); } else{ return solve_1D(ml + 1, R, mr); } } signed main(){ //ios_base::sync_with_stdio(false); //cin.tie(0); //cout.tie(0); cin>>X>>Y>>Z>>Q; arr.resize(X + 1); for(auto& i : arr){ i.resize(Y + 1); for(auto& j : i){ j.resize(Z + 1); } } int res = solve_1D(1, X, 1 + (X-1)*(phi-1)); cout<<"! "<<res<<" 1 1"<<endl; 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...