Submission #1244080

#TimeUsernameProblemLanguageResultExecution timeMemory
1244080moondarksideScales (IOI15_scales)C++20
Compilation error
0 ms0 KiB
#include<bits/stdc++.h>
using namespace std;


void init(int T) {
	return;
}

int getHeaviest(int A,int B,int C);
int getLightest(int A,int B,int C);
int getMedian(int A,int B,int C);
int getNextLightest(int A,int  B,int  C, int D);
void Answer(vector<int> W);

int BestComb(vector<vector<int>> Combs) {
    if(Combs.size()==1){
        Answer(Combs[0]);
    }
	vector<int> BestW;
	int bestSplit=Combs.size();
	vector<vector<int>> A;
	vector<vector<int>> B;
	vector<vector<int>> C;
	for(int a=0; a<6; a++) {
		for(int b=a+1; b<6; b++) {
			for(int c=b+1; c<6; c++) {
				vector<vector<int>> Am;
				vector<vector<int>> Bm;
				vector<vector<int>> Cm;
				for(int i=0; i<Combs.size(); i++) {



					if(Combs[i][a]>Combs[i][b] && Combs[i][a]>Combs[i][c]) {
						Am.push_back(Combs[i]);
					}

					if(Combs[i][b]>Combs[i][c] && Combs[i][b]>Combs[i][c]) {
						Bm.push_back(Combs[i]);
					}

					if(Combs[i][c]>Combs[i][b] && Combs[i][c]>Combs[i][a]) {
						Cm.push_back(Combs[i]);
					}



				}
				int size=max(Am.size(),max(Bm.size(),Cm.size()));
				if(size<bestSplit) {
					bestSplit=size;
					A=Am;
					B=Bm;
					C=Cm;
					BestW= {0,a,b,c};
				}
			}
		}
	}


	for(int a=0; a<6; a++) {
		for(int b=a+1; b<6; b++) {
			for(int c=b+1; c<6; c++) {
				vector<vector<int>> Am;
				vector<vector<int>> Bm;
				vector<vector<int>> Cm;
				for(int i=0; i<Combs.size(); i++) {



					if(Combs[i][a]<Combs[i][b] && Combs[i][a]<Combs[i][c]) {
						Am.push_back(Combs[i]);
					}

					if(Combs[i][b]<Combs[i][c] && Combs[i][b]<Combs[i][c]) {
						Bm.push_back(Combs[i]);
					}

					if(Combs[i][c]<Combs[i][b] && Combs[i][c]<Combs[i][a]) {
						Cm.push_back(Combs[i]);
					}



				}
				int size=max(Am.size(),max(Bm.size(),Cm.size()));
				if(size<bestSplit) {
					bestSplit=size;
					A=Am;
					B=Bm;
					C=Cm;
					BestW= {1,a,b,c};
				}
			}
		}
	}

	for(int a=0; a<6; a++) {
		for(int b=a+1; b<6; b++) {
			for(int c=b+1; c<6; c++) {
				vector<vector<int>> Am;
				vector<vector<int>> Bm;
				vector<vector<int>> Cm;
				for(int i=0; i<Combs.size(); i++) {



					if(Combs[i][a]<Combs[i][b] && Combs[i][a]>Combs[i][c]) {
						Am.push_back(Combs[i]);
					}

					if(Combs[i][a]>Combs[i][b] && Combs[i][a]>Combs[i][c]) {
						Am.push_back(Combs[i]);
					}

					if(Combs[i][b]<Combs[i][c] && Combs[i][b]>Combs[i][c]) {
						Bm.push_back(Combs[i]);
					}

					if(Combs[i][b]>Combs[i][c] && Combs[i][b]<Combs[i][c]) {
						Bm.push_back(Combs[i]);
					}

					if(Combs[i][c]<Combs[i][b] && Combs[i][c]>Combs[i][a]) {
						Cm.push_back(Combs[i]);
					}

					if(Combs[i][c]>Combs[i][b] && Combs[i][c]<Combs[i][a]) {
						Cm.push_back(Combs[i]);
					}



				}
				int size=max(Am.size(),max(Bm.size(),Cm.size()));
				if(size<bestSplit) {
					bestSplit=size;
					A=Am;
					B=Bm;
					C=Cm;
					BestW= {2,a,b,c};
				}
			}
		}
	}

	for(int d=0; d<6; d++) {
		for(int a=0; a<6; a++) {
			for(int b=a+1; b<6; b++) {
				for(int c=b+1; c<6; c++) {
					if(a!=d && b!=d && c!=d) {
						vector<vector<int>> Am;
						vector<vector<int>> Bm;
						vector<vector<int>> Cm;
						for(int i=0; i<Combs.size(); i++) {



							vector<int> Temp={Combs[i][a],Combs[i][b],Combs[i][c],Combs[i][d]};
							
							sort(Temp.begin(),Temp.end());
							
							int index=0;
							for(int j=0;j<4;j++){
							    if (Temp[j]==Combs[i][d]){
							        index=j;
							    }
							}
							
							
							if(index<3){
							    index++;
							}
							else{
							    index=0;
							}
							
							if(Temp[index]==Combs[i][a]){
							    Am.push_back(Combs[i]);
							}
							
							if(Temp[index]==Combs[i][b]){
							    Bm.push_back(Combs[i]);
							}
							
							if(Temp[index]==Combs[i][c]){
							    Cm.push_back(Combs[i]);
							}



						}
						int size=max(Am.size(),max(Bm.size(),Cm.size()));
						if(size<bestSplit) {
							bestSplit=size;
							A=Am;
					        B=Bm;
					        C=Cm;
							BestW= {3,a,b,c,d};
						}
					}
				}
			}
		}
	}

    int best=0;
    if(BestW[0]==0){
        best=getLightest(BestW[1],BestW[2],BestW[3]);
    }
    if(BestW[0]==1){
        best=getMedian(BestW[1],BestW[2],BestW[3]);
    }
    if(BestW[0]==2){
        best=getHeaviest(BestW[1],BestW[2],BestW[3]);
    }
    if(BestW[0]==3){
        best=getNextLightest(BestW[1],BestW[2],BestW[3],BestW[4]);
    }

    if(best==BestW[1]){
        return BestComb(A)+1;
    }

    if(best==BestW[2]){
        return BestComb(B)+1;
    }
    
    if(best==BestW[3]){
        return BestComb(C)+1;
    }

	return 1;
}


void buildPerm(vector<bool> Chosen,vector<vector<int>>& Perms,vector<int> T) {
	if(T.size()==6) {
		Perms.push_back(T);
		return;
	}

	for(int i=0; i<6; i++) {
		if(!Chosen[i]) {
			Chosen[i]=true;
			T.push_back(i);
			buildPerm(Chosen,Perms,T);
			T.pop_back();
			Chosen[i]=false;

		}
	}



}

void OrderCoins() {
	vector<vector<int>> Perms;
	vector<bool> C(6);
	buildPerm(C,Perms,vector<int>());
	BestComb(Perms);

}

Compilation message (stderr)

/usr/bin/ld: /tmp/ccA5JDQN.o: in function `BestComb(std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >)':
scales.cpp:(.text+0x1331): undefined reference to `Answer(std::vector<int, std::allocator<int> >)'
/usr/bin/ld: scales.cpp:(.text+0x308a): undefined reference to `getHeaviest(int, int, int)'
/usr/bin/ld: scales.cpp:(.text+0x309d): undefined reference to `getMedian(int, int, int)'
/usr/bin/ld: scales.cpp:(.text+0x30b0): undefined reference to `getLightest(int, int, int)'
/usr/bin/ld: scales.cpp:(.text+0x3145): undefined reference to `getNextLightest(int, int, int, int)'
/usr/bin/ld: /tmp/ccF08QyJ.o: in function `main':
grader.c:(.text.startup+0x83): undefined reference to `init'
/usr/bin/ld: grader.c:(.text.startup+0x101): undefined reference to `orderCoins'
collect2: error: ld returned 1 exit status