Submission #146160

#TimeUsernameProblemLanguageResultExecution timeMemory
146160MvCWorm Worries (BOI18_worm)C++11
10 / 100
2140 ms1048580 KiB
#pragma GCC target("avx2")
#pragma GCC optimization("O3")
#pragma GCC optimization("unroll-loops")
#include<bits/stdc++.h>
//#include "boxes.h"
#define rc(x) return cout<<x<<endl,0
#define pb push_back
#define mkp make_pair
#define in insert
#define er erase
#define fd find
#define fr first
#define sc second
typedef long long ll;
typedef long double ld;
const ll INF=0x3f3f3f3f3f3f3f3f;
const ll llinf=(1LL<<62);
const int inf=(1<<30);
const int nmax=1e6+50;
const int mod=1e9+7;
using namespace std;
int n,m,k,q,viz[nmax],x,mx,i,j,t;
pair<int,pair<int,int> >rs;
vector<pair<int,pair<int,int> > >rad;
int ask(int x,int y,int z)
{
	if(x==0 || x==n+1)return 0;
	//if(viz[x])return viz[x];
	cout<<"? "<<x<<" "<<y<<" "<<z<<endl;
	cin>>viz[x];
	return viz[x];
}
void ans(int x,int y,int z)
{
	cout<<"! "<<x<<" "<<y<<" "<<z<<endl;
	exit(0);
}
void rec(int l,int r)
{
	srand(time(0));
	if(l==r)ans(l,1,1);
	int x,y,mid;
	ll z;
	if(q==1)
	{
		z=l+rand()%(r-l+1);
		if(z<1)z=1;
		if(z>n)z=n;
		x=ask(z,1,1);
		if(max(x,max(viz[l],viz[r]))==x)ans(z,1,1);
		if(max(x,max(viz[l],viz[r]))==viz[l])ans(l,1,1);
		if(max(x,max(viz[l],viz[r]))==viz[r])ans(r,1,1);
	}
	mid=(l+r)/2;
	x=ask(mid,1,1),y=ask(mid+1,1,1);
	q-=2;
	if(x>=y)
	{
		rec(l,mid);
	}
	else if(x<y)
	{
		rec(mid+1,r);
	}
}
int main()
{
	//freopen("sol.in","r",stdin);
	//freopen("sol.out","w",stdout);
	mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
	ios_base::sync_with_stdio(false);cin.tie(0);cerr.tie(0);cout.tie(0);
	cin>>n>>m>>k>>q;
	if(m==1 && k==1)rec(1,n);
	else
	{
		for(i=1;i<=n;i++)for(j=1;j<=m;j++)for(t=1;t<=k;t++)rad.pb(mkp(i,mkp(j,k)));
		shuffle(rad.begin(),rad.end(),rng);
		for(i=0;i<q;i++)
		{
			x=ask(rad[i].fr,rad[i].sc.fr,rad[i].sc.sc);
			if(x>mx)
			{
				mx=x;
				rs=mkp(rad[i].fr,mkp(rad[i].sc.fr,rad[i].sc.sc));
			}
		}
	}
	ans(rs.fr,rs.sc.fr,rs.sc.sc);
	return 0;
}

Compilation message (stderr)

worm.cpp:2:0: warning: ignoring #pragma GCC optimization [-Wunknown-pragmas]
 #pragma GCC optimization("O3")
 
worm.cpp:3:0: warning: ignoring #pragma GCC optimization [-Wunknown-pragmas]
 #pragma GCC optimization("unroll-loops")
#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...