Submission #136930

#TimeUsernameProblemLanguageResultExecution timeMemory
136930amiratouScales (IOI15_scales)C++14
0 / 100
4 ms504 KiB
#include "scales.h"
#include <bits/stdc++.h>
#define pb push_back
using namespace std;

vector<vector<int> > vec;
void init(int T) {
	vec.resize(720);
	vector<int> perm={1,2,3,4,5,6};
	int idx=0;
	do{
		vec[idx++]=perm;
	}while(next_permutation(perm.begin(),perm.end()));
}
int gnl(vector<int> G,int a,int b,int c,int d){
	int idx=0,j=-1;
	for (int i = 1; i < 6; ++i)
		if(G[i]==d){idx=i;break;}
	for (int i = idx+1; i < 6; ++i)
		if(G[i]==a||G[i]==b||G[i]==c){j=i;break;}
	if(j==-1)
		for (int i = 0; i < 6; ++i)
			if(G[i]==a||G[i]==b||G[i]==c)return G[i];
		
	return G[j];
}
void orderCoins() {
	bool valid[720];
	memset(valid,1,sizeof valid);
	vector<int> ans;
	int W[6],A[3],B[3],C[3],D[3];
	int q=getLightest(1,2,3),q2=getHeaviest(1,2,3);
	A[0]=q,A[2]=q2,A[1]=6-q-q2;
	q=getLightest(4,5,6),q2=getHeaviest(4,5,6);
	B[0]=q,B[2]=q2,B[1]=15-q-q2;
	q=getMedian(A[0],A[2],B[0]),q2=getMedian(A[1],B[1],B[2]);
	C[1]=q;
	if(q==A[0])C[2]=A[2],C[0]=B[0];
	else if(q==A[2])C[0]=A[0],C[2]=B[0];
	else C[0]=A[0],C[2]=A[2];
	D[1]=q2;
	if(q2==B[1])D[0]=A[1],D[2]=B[2];
	else if(q2==A[1])D[0]=B[1],D[2]=B[2];
	else D[0]=B[1],D[2]=A[1];
	int ask1=getNextLightest(A[0],A[1],A[2],B[2]),ask2=getNextLightest(B[0],B[1],B[2],A[2]);
	for (int i = 0; i <720; ++i)
	{
		int tab[3];
		for (int z = 0; z < 3; ++z)
			for (int j = 0; j < 6; ++j)
				if(A[z]==vec[i][j]){tab[z]=j;break;}
		for (int z = 1; z < 3; ++z)
			if(tab[z]<tab[z-1]){valid[i]=0;break;}
		if(!valid[i])continue;
		for (int z = 0; z < 3; ++z)
			for (int j = 0; j < 6; ++j)
				if(B[z]==vec[i][j]){tab[z]=j;break;}
				
		for (int z = 1; z < 3; ++z)
			if(tab[z]<tab[z-1]){valid[i]=0;break;}
		if(!valid[i])continue;
		for (int z = 0; z < 3; ++z)
			for (int j = 0; j < 6; ++j)
				if(C[z]==vec[i][j]){tab[z]=j;break;}
		for (int z = 1; z < 3; ++z)
			if(tab[z]<tab[z-1]){valid[i]=0;break;}
		if(!valid[i])continue;
		for (int z = 0; z < 3; ++z)
			for (int j = 0; j < 6; ++j)
				if(D[z]==vec[i][j]){tab[z]=j;break;}
		for (int z = 1; z < 3; ++z)
			if(tab[z]<tab[z-1]){valid[i]=0;break;}
		if(!valid[i])continue;
		if(gnl(vec[i],A[0],A[1],A[2],B[2])!=ask1||gnl(vec[i],B[0],B[1],B[2],A[2])!=ask2)valid[i]=0;
	}
	for (int i = 0; i < 720; ++i)
	{
		if(!valid[i])continue;
		for (int j = 0;j < 6; j++)
			W[j]=vec[i][j];
		break;
	}
    answer(W);
}

Compilation message (stderr)

scales.cpp: In function 'void init(int)':
scales.cpp:7:15: warning: unused parameter 'T' [-Wunused-parameter]
 void init(int T) {
               ^
#Verdict Execution timeMemoryGrader output
Fetching results...