Submission #59268

#TimeUsernameProblemLanguageResultExecution timeMemory
59268TadijaSebezCave (IOI13_cave)C++11
100 / 100
610 ms640 KiB
#include "cave.h"
#include <stdio.h>
#include <vector>
using namespace std;
#define pb push_back
const int N=5005;
int id[N],ty[N];
int mask[N],n,good[N],k[N];
bool done[N];
/*int lid[N],tid[N];
int ok[N];
int tryCombination(int a[])
{
	int i;
	for(i=0;i<n;i++) ok[lid[i]]=a[i]==tid[i];
	for(i=0;i<n;i++) if(!ok[i]) return i;
	return -1;
}
void answer(int a[], int id[])
{
	int i;
	for(i=0;i<n;i++) printf("%i ",a[i]);printf("\n");
	for(i=0;i<n;i++) printf("%i ",id[i]);printf("\n");
}*/
int get(int a[]){ int x=tryCombination(a);if(x==-1) return n;return x;}
void exploreCave(int N)
{
	n=N;
	int x=get(mask),y;
	int i,j;
	for(i=0;i<n;i++)
	{
		mask[i]=1;
		y=get(mask);
		if(y<x)
		{
			id[i]=y,ty[i]=0,done[i]=1,good[i]=0;
			//printf("1:%i:%i %i\n",i,ty[i],id[i]);
		}
		mask[i]=0;
	}
	vector<int> pos,tmp[2];
	bool ok=1;
	for(i=x;i<n;i++)
	{
		pos.clear();
		for(j=0;j<n;j++) if(!done[j]) pos.pb(j);
		while(pos.size()>1)
		{
			tmp[0].clear();tmp[1].clear();
			for(j=0;j<pos.size();j++) tmp[j&1].pb(pos[j]);
			for(j=0;j<tmp[0].size();j++) good[tmp[0][j]]^=1;
			y=get(good);
			if(ok)
			{
				if(y>i) pos=tmp[0];
				else pos=tmp[1];
			}
			else
			{
				if(y>i) pos=tmp[1];
				else pos=tmp[0];
			}
			for(j=0;j<tmp[0].size();j++) good[tmp[0][j]]^=1;
		}
		id[pos[0]]=i;
		ty[pos[0]]=good[pos[0]]=ok;
		y=get(good);
		done[pos[0]]=1;
		if(y>i+1) ok=0;
		else ok=1;
		//printf("2:%i:%i %i\n",pos[0],ty[pos[0]],id[pos[0]]);
	}
	answer(ty,id);
}
/*int main()
{
	int n,i;
	scanf("%i",&n);
	for(i=0;i<n;i++) scanf("%i",&tid[i]);
	for(i=0;i<n;i++) scanf("%i",&lid[i]);
	exploreCave(n);
	return 0;
}*/

Compilation message (stderr)

cave.cpp: In function 'void exploreCave(int)':
cave.cpp:51:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    for(j=0;j<pos.size();j++) tmp[j&1].pb(pos[j]);
            ~^~~~~~~~~~~
cave.cpp:52:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    for(j=0;j<tmp[0].size();j++) good[tmp[0][j]]^=1;
            ~^~~~~~~~~~~~~~
cave.cpp:64:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    for(j=0;j<tmp[0].size();j++) good[tmp[0][j]]^=1;
            ~^~~~~~~~~~~~~~
#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...