제출 #1244148

#제출 시각아이디문제언어결과실행 시간메모리
1244148moondarkside저울 (IOI15_scales)C++20
컴파일 에러
0 ms0 KiB
#include<bits/stdc++.h>
using namespace std;

#include"scales.h"

void init(int T) {
	return;
}
/*


vector<int> Coins={1,5,2,3,0,4};

void answer(int W[]){

    for(int i=0;i<6;i++){
        if(Coins[i]!=W[i]){
            cout<<"BAD";
        }
    }

    return;
}

int getMedian(int A, int B, int C){
    vector<pair<int,int>> a={{Coins[A],A},{Coins[B],B},{Coins[C],C}};
    sort(a.begin(),a.end());
    return a[1].second;
}
int getHeaviest(int A, int B, int C){
    vector<pair<int,int>> a={{Coins[A],A},{Coins[B],B},{Coins[C],C}};
    sort(a.begin(),a.end());
    return a[2].second;

}
int getLightest(int A, int B, int C){
    vector<pair<int,int>> a={{Coins[A],A},{Coins[B],B},{Coins[C],C}};
    sort(a.begin(),a.end());
    return a[0].second;
}
int getNextLightest(int A, int B, int C, int D){
    vector<pair<int,int>> a={{Coins[A],A},{Coins[B],B},{Coins[C],C},{Coins[D],D}};
    sort(a.begin(),a.end());
    for(int i=0;i<4;i++){
        if(a[i].second==D){

            i++;
            i%=4;
            return a[i].second;


        }
    }
    return a[0].second;
}

*/
int BestComb(vector<vector<int>> Combs) {
	if(Combs.size()==1) {

		if(BestW.size()==0) {
			while(true) {
				cout<<1;
			}
		}

		int W[6];
		for(int i=0; i<6; i++) {
			W[i]=Combs[0][i];
		}
		answer(W);
		return 0;
	}
	vector<int> BestW;
	int bestSplit=Combs.size()+1;
	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][a]) {
						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= {2,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][a]) {
						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][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][a]) {
						Bm.push_back(Combs[i]);
					}

					if(Combs[i][b]>Combs[i][c] && Combs[i][b]<Combs[i][a]) {
						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= {1,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};
						}
					}
				}
			}
		}
	}

	if(BestW.size()==0) {
		while(true) {
			cout<<1;
		}
	}

	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>());
	cout<<BestComb(Perms)<<endl;

}



int main() {

	vector<vector<int>> Perms;
	vector<bool> C(6);
	buildPerm(C,Perms,vector<int>());

	for(int i=0; i<720; i++) {
		cout<<i<<"-";
		Coins=Perms[i];
		orderCoins();
	}




}

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

scales.cpp: In function 'int BestComb(std::vector<std::vector<int> >)':
scales.cpp:61:20: error: 'BestW' was not declared in this scope
   61 |                 if(BestW.size()==0) {
      |                    ^~~~~
scales.cpp: In function 'int main()':
scales.cpp:338:17: error: 'Coins' was not declared in this scope
  338 |                 Coins=Perms[i];
      |                 ^~~~~