제출 #398222

#제출 시각아이디문제언어결과실행 시간메모리
398222AmineWeslatiWorm Worries (BOI18_worm)C++14
59 / 100
1270 ms499524 KiB
#include "bits/stdc++.h"
using namespace std; 

typedef long long ll;
typedef vector<int>vi;
#define pb push_back
#define sz(v) (int)v.size()
typedef string str;
#define FOR(i,a,b) for(int i=a; i<b; i++)

void IO(){
#ifdef LOCAL
	freopen("input.txt","r",stdin);
	freopen("output.txt","w",stdout);
#endif
}
//------------------------------------------------------//

void ckmin(int &x, int y){x=min(x,y);}
bool ckmax(int &x, int y){
	if(y>x){
		x=y; 
		return 1;
	}
	return 0;
}

int random(int r){
	return rand()%r+1;
}

const int MX=1e6+10;
const int dx[6]={1,-1,0,0,0,0},dy[6]={0,0,1,-1,0,0},dz[6]={0,0,0,0,1,-1};
int N,M,K,Q;
vector<vector<vector<int>>>memo;

int get(int x, int y, int z){
	if(min(x,min(y,z))<1 || x>N || y>M || z>K) return 0;
	if(memo[x][y][z]!=-1) return memo[x][y][z];
	cout << "? " << x << ' ' << y << ' ' << z << endl;
	int val; cin>>val;
	return memo[x][y][z]=val;
}

void answer(int x, int y, int z){
	cout << "! " << x << ' ' << y << ' ' << z << endl;
	cout.flush();
	exit(0);
}


int main(){
	IO();

	cin>>N>>M>>K>>Q;
	memo.resize(N+1);
	FOR(i,1,N+1){
		memo[i].resize(M+1);
		FOR(j,1,M+1) memo[i][j].assign(K+1,-1);
	}


	int rep=Q/2,mx=0,x,y,z;
	while(rep--){
		int xx=random(N),yy=random(M),zz=random(K);
		if(ckmax(mx,get(xx,yy,zz))){
			x=xx; y=yy; z=zz; 
		}
	}

	while(1){
		int f=0;
		FOR(m,0,6){
			int nx=x+dx[m],ny=y+dy[m],nz=z+dz[m];
			if(get(nx,ny,nz)>get(x,y,z)){
				f=1;
				x=nx; y=ny; z=nz; 
				break;
			}
		}
		if(!f) break;
	}
	answer(x,y,z);
	
	
}

컴파일 시 표준 에러 (stderr) 메시지

worm.cpp: In function 'int main()':
worm.cpp:83:8: warning: 'z' may be used uninitialized in this function [-Wmaybe-uninitialized]
   83 |  answer(x,y,z);
      |  ~~~~~~^~~~~~~
worm.cpp:83:8: warning: 'y' may be used uninitialized in this function [-Wmaybe-uninitialized]
worm.cpp:83:8: warning: 'x' 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...