Submission #1365912

#TimeUsernameProblemLanguageResultExecution timeMemory
1365912thelegendary08저울 (IOI15_scales)C++17
55.56 / 100
0 ms356 KiB
#include "scales.h"
#define low(a,b,c) getLightest(a,b,c)
#define high(a,b,c) getHeaviest(a,b,c)
#define med(a,b,c) getMedian(a,b,c)
using namespace std; 

void init(int T) {
	
}

void orderCoins() {
    int W[] = {1, 2, 3, 4, 5, 6};
    int mn = low(1,2,3), mx = high(1,2,3); W[0] = mn, W[2] = mx; for(int i = 1; i <= 3; i++)if(i != W[0] && i != W[2])W[1] = i;
    mn = low(4,5,6), mx = high(4,5,6); W[3] = mn, W[5] = mx; for(int i = 4; i <= 6; i++)if(i != W[3] && i != W[5])W[4] = i;
   	int ans[6]; 
   	int p1 = 2, p2 = 5; int ct = 0; while(ct < 3){
   		ct++; if(ct == 1){
   			mx = high(W[2], W[4], W[5]); ans[5] = mx; if(mx == W[5])p2--; else p1--; 
   		}
   		else{
   			mx = med(W[p1], W[p2], ans[5]); ans[6 - ct] = mx; if(mx == W[p1])p1--; else p2--;  
   		}
   	}
   	if(p1 == -1){for(int i = 0; i <= 2; i++)ans[i] = W[i+3];}
   	else if(p2 == 2){for(int i = 0; i <= 2; i++)ans[i] = W[i];}
    else{
    	int a, b, oth; if(p1 == 0)oth = W[p1], a = W[3], b = W[4]; else oth = W[p2], a = W[0], b = W[1]; 
    	int mid = med(a, b, oth); 
    	if(mid == b)ans[0] = a, ans[1] = b, ans[2] = oth; 
    	else if(mid == a)ans[0] = oth, ans[1] = a, ans[2] = b; 
    	else ans[0] = a, ans[1] = oth, ans[2] = b; 
    }
    answer(ans);
}
#Result Execution timeMemoryGrader output
Fetching results...