Submission #831595

#TimeUsernameProblemLanguageResultExecution timeMemory
831595waldiScales (IOI15_scales)C++17
Compilation error
0 ms0 KiB
#include<bits/stdc++.h>
#define FOR(i,p,k) for(int i=(p);i<=(k);++i)
#define REP(i,n) FOR(i,0,(n)-1)
using namespace std;

#ifdef LOCAL
vector<int> perm;
int getLightest(int a, int b, int c){
	if(perm[a] < min(perm[b], perm[c])) return a;
	if(perm[b] < min(perm[a], perm[c])) return b;
	return c;
}
int getHeaviest(int a, int b, int c){
	if(perm[a] > max(perm[b], perm[c])) return a;
	if(perm[b] > max(perm[a], perm[c])) return b;
	return c;
}
int getMedian(int a, int b, int c){
	int x = getLightest(a, b, c);
	int y = getHeaviest(a, b, c);
	if(a!=x && a!=y) return a;
	if(b!=x && b!=y) return b;
	return c;
}
int getNextLightest(int a, int b, int c, int d){
	vector<int> wieksze;
	if(perm[a] > perm[d]) wieksze.emplace_back(a);
	if(perm[b] > perm[d]) wieksze.emplace_back(b);
	if(perm[c] > perm[d]) wieksze.emplace_back(c);
	if(wieksze.size() == 1) return wieksze[0];
	if(wieksze.size() == 2) return perm[wieksze[0]] < perm[wieksze[1]] ? wieksze[0] : wieksze[1];
	return getLightest(a, b, c);
}
void answer(int wyn[]){
	REP(i, 6-1) if(perm[wyn[i]] > perm[wyn[i+1]]){
		FOR(x, 1, 6) printf("%d ", perm[x]);
		printf("\n");
		REP(x, 6) printf("%d ", wyn[x]);
		printf("\ndupa\n");
		exit(1);
	}
}
#endif

void init(int t){
	
}

vector<int> posortuj4(vector<int> vec){
	int med = getMedian(vec[0], vec[1], vec[2]);
	if(med == vec[0]) swap(vec[0], vec[1]);
	if(med == vec[2]) swap(vec[2], vec[1]);
	// vec = {?, 2=med, ?,  ?}
	
	int maks = getHeaviest(vec[0], vec[2], vec[3]);
	if(maks == vec[3]){
		int mini = getLightest(vec[0], vec[1], vec[2]);
		if(mini == vec[2]) swap(vec[0], vec[2]);
		return vec;
	}
	
	if(maks == vec[0]) swap(vec[0], vec[2]);
	// vec = {1, 2=med, 3,  ?}
	
	int t = getNextLightest(vec[0], vec[1], vec[2], vec[3]);
	swap(vec[2], vec[3]);
	if(t == vec[3]) return vec;
	swap(vec[1], vec[2]);
	if(t == vec[2]) return vec;
	swap(vec[0], vec[1]);
	return vec;
}
void orderCoins(){
	vector<int> male = {1, 2, 3};
	swap(male[0], male[getLightest(1, 2, 3)-1]);
	// male = {1, ?, ?}
	
	vector<int> duze = {4, 5, 6};
	swap(duze[2], duze[getHeaviest(4, 5, 6)-4]);
	// duze = {?, ?, 3}
	
	int mini = getLightest(male[0], duze[0], duze[1]);// minimum wszystkiego
	int maks = getHeaviest(male[1], male[2], duze[2]);// maksimum wszystkiego
	
	vector<int> vec;
	FOR(i, 1, 6) if(i != mini && i != maks) vec.emplace_back(i);
	// vec - wszystko bez minimum i maksimum
	vec = posortuj4(vec);
	int wyn[] = {mini, vec[0], vec[1], vec[2], vec[3], maks};
	answer(wyn);
}

#ifdef LOCAL
int main(){
	perm = {69, 1, 2, 3, 4, 5, 6};
	do{
		orderCoins();
	} while(next_permutation(perm.begin()+1, perm.end()));
}
#endif

Compilation message (stderr)

scales.cpp: In function 'void init(int)':
scales.cpp:45:15: warning: unused parameter 't' [-Wunused-parameter]
   45 | void init(int t){
      |           ~~~~^
scales.cpp: In function 'std::vector<int> posortuj4(std::vector<int>)':
scales.cpp:50:12: error: 'getMedian' was not declared in this scope
   50 |  int med = getMedian(vec[0], vec[1], vec[2]);
      |            ^~~~~~~~~
scales.cpp:55:13: error: 'getHeaviest' was not declared in this scope
   55 |  int maks = getHeaviest(vec[0], vec[2], vec[3]);
      |             ^~~~~~~~~~~
scales.cpp:57:14: error: 'getLightest' was not declared in this scope
   57 |   int mini = getLightest(vec[0], vec[1], vec[2]);
      |              ^~~~~~~~~~~
scales.cpp:65:10: error: 'getNextLightest' was not declared in this scope
   65 |  int t = getNextLightest(vec[0], vec[1], vec[2], vec[3]);
      |          ^~~~~~~~~~~~~~~
scales.cpp: In function 'void orderCoins()':
scales.cpp:75:21: error: 'getLightest' was not declared in this scope
   75 |  swap(male[0], male[getLightest(1, 2, 3)-1]);
      |                     ^~~~~~~~~~~
scales.cpp:79:21: error: 'getHeaviest' was not declared in this scope
   79 |  swap(duze[2], duze[getHeaviest(4, 5, 6)-4]);
      |                     ^~~~~~~~~~~
scales.cpp:90:2: error: 'answer' was not declared in this scope
   90 |  answer(wyn);
      |  ^~~~~~