답안 #973046

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
973046 2024-05-01T12:51:42 Z PenguinsAreCute 저울 (IOI15_scales) C++17
100 / 100
1 ms 604 KB
// as a wise observer once said, "informatics students when the task is to be elegant"
// that one unemployed friend on a tuesday trying to solve this in 6 queries
// step 1: query 0,1,2. let 0 be median.
// step 2: query 3,4,5. let 3 be greatest.
// step 3: query nextlightest 0,4,5,1.
// If its 5 swap 4,5. So its 0 (26 cases) or 4 (27 cases)
// case a: its 0
// step 4a: query nextlight among 3,4,5,1
// case ai: we get 3
// step 5ai: query 0,4,5 for smallest
// If we get 0, either 140523 or 140532 is weight
// If we get 4, the weights are 324501 325401 425301
// case aii: we get 4 after step 4a
// step 5aii: median 234
// if median 2, its 103524 104523 214530
// if median 3, its 105423 215430 435201
// if median 4, its 102534 150423 213540
// case b of step 3: nextlightest 0451 is 4
// step 4b: query 1,2,4 for smallest
// 5bi: 1 smallest, then query 015 for median
// If 0 203514 204513 205413
// If 1 314520 315420 415320
// If 5 304512 305412 405312
// 5bii (2 smallest): query 045 for greatest
// If 0 340512 350412 450312
// if 4 130542 230541 231540
// If 5 120534 240513 250413
// 5biii (4 smallest): query 013 for median
// if 0 451302 452301 453201
// if 1 241503 341502 342501
// if 3 251403 351402 352401
#include "scales.h"
#include <bits/stdc++.h>
using namespace std;
void init(int T) {}
vector<int> findOrder() {
	int W[] = {1, 2, 3, 4, 5, 6};
	swap(W[getMedian(1,2,3)-1],W[0]);
	swap(W[getHeaviest(4,5,6)-1],W[3]);
	int meow = getNextLightest(W[0],W[4],W[5],W[1]);
	if(meow==W[0]) {
		meow = getNextLightest(W[3],W[4],W[5],W[1]);
		if(meow==W[3]) {
			meow = getLightest(W[0],W[4],W[5]);
			if(meow==W[0]) {
				meow = getLightest(W[3],W[4],W[5]);
				if(meow==W[4]) return {W[2],W[0],W[4],W[5],W[1],W[3]};
				else return {W[2],W[0],W[5],W[4],W[1],W[3]};
			} else if(meow==W[5]) swap(W[4],W[5]);
			meow = getMedian(W[0],W[2],W[3]);	
			if(meow==W[0]) return {W[4],W[5],W[1],W[3],W[0],W[2]};
			if(meow==W[2]) return {W[4],W[5],W[1],W[0],W[2],W[3]};
			return {W[4],W[5],W[1],W[0],W[3],W[2]};
		}
		if(meow==W[5]) swap(W[4],W[5]);
		meow = getMedian(W[2],W[3],W[4]);
		if(meow==W[2]) {
			meow = getMedian(W[1],W[2],W[5]);
			if(meow==W[1]) return {W[5],W[1],W[0],W[4],W[2],W[3]};
			if(meow==W[2]) return {W[1],W[0],W[4],W[2],W[5],W[3]};
			return {W[1],W[0],W[4],W[5],W[2],W[3]};
		}
		if(meow==W[3]) {
			meow = getMedian(W[1],W[3],W[5]);
			if(meow==W[1]) return {W[5],W[1],W[0],W[4],W[3],W[2]};
			if(meow==W[3]) return {W[4],W[5],W[3],W[1],W[0],W[2]};
			return {W[1],W[0],W[4],W[5],W[3],W[2]};
		}
		meow = getMedian(W[1],W[3],W[5]);
		if(meow==W[1]) return {W[5],W[1],W[0],W[2],W[4],W[3]};
		if(meow==W[3]) return {W[2],W[0],W[4],W[5],W[3],W[1]};
		if(meow==W[5]) return {W[1],W[0],W[2],W[4],W[5],W[3]};
	}
	if(meow==W[5]) swap(W[4],W[5]);
	meow = getLightest(W[1],W[2],W[4]);
	if(meow==W[1]) {
		meow = getMedian(W[0],W[1],W[5]);
		if(meow==W[0]) {
			meow = getMedian(W[2],W[3],W[5]);
			if(meow==W[2]) return {W[1],W[4],W[0],W[5],W[2],W[3]};
			if(meow==W[3]) return {W[1],W[4],W[0],W[5],W[3],W[2]};
			return {W[1],W[4],W[0],W[2],W[5],W[3]};
		}
		if(meow==W[1]) {
			meow = getMedian(W[0],W[2],W[3]);
			if(meow==W[0]) return {W[5],W[1],W[4],W[3],W[0],W[2]};
			if(meow==W[2]) return {W[5],W[1],W[4],W[0],W[2],W[3]};
			return {W[5],W[1],W[4],W[0],W[3],W[2]};
		}
		meow = getMedian(W[0],W[2],W[3]);
		if(meow==W[0]) return {W[1],W[4],W[5],W[3],W[0],W[2]};
		if(meow==W[2]) return {W[1],W[4],W[5],W[0],W[2],W[3]};
		return {W[1],W[4],W[5],W[0],W[3],W[2]};
	}
	if(meow==W[2]) {
		meow = getHeaviest(W[0],W[4],W[5]);	
		if(meow==W[0]) {
			meow = getMedian(W[0],W[1],W[3]);
			if(meow==W[0]) return {W[2],W[4],W[5],W[3],W[0],W[1]};
			if(meow==W[1]) return {W[2],W[4],W[5],W[0],W[1],W[3]};
			return {W[2],W[4],W[5],W[0],W[3],W[1]};
		}
		if(meow==W[4]) {
			meow = getMedian(W[0],W[2],W[5]);
			if(meow==W[0]) return {W[2],W[0],W[5],W[1],W[4],W[3]};
			if(meow==W[2]) return {W[5],W[2],W[0],W[1],W[4],W[3]};
			return {W[2],W[5],W[0],W[1],W[4],W[3]};
		}
		meow = getMedian(W[1],W[3],W[5]);
		if(meow==W[1]) return {W[2],W[4],W[0],W[5],W[1],W[3]};
		if(meow==W[3]) return {W[2],W[4],W[0],W[5],W[3],W[1]};
		return {W[2],W[0],W[1],W[4],W[5],W[3]};
	}
	meow = getMedian(W[0],W[1],W[3]);
	if(meow==W[0]) {
		meow = getMedian(W[2],W[3],W[5]);
		if(meow==W[2]) return {W[4],W[5],W[2],W[3],W[0],W[1]};
		if(meow==W[3]) return {W[4],W[5],W[3],W[2],W[0],W[1]};
		return {W[4],W[2],W[5],W[3],W[0],W[1]};
	}
	if(meow==W[1]) {
		meow = getMedian(W[0],W[2],W[5]);
		if(meow==W[0]) return {W[4],W[2],W[0],W[5],W[1],W[3]};
		if(meow==W[2]) return {W[4],W[5],W[2],W[0],W[1],W[3]};
		return {W[4],W[2],W[5],W[0],W[1],W[3]};
	}
	meow = getMedian(W[0],W[2],W[5]);
	if(meow==W[0]) return {W[4],W[2],W[0],W[5],W[3],W[1]};
	if(meow==W[2]) return {W[4],W[5],W[2],W[0],W[3],W[1]};
	return {W[4],W[2],W[5],W[0],W[3],W[1]};
}
void orderCoins() {
	vector<int> v = findOrder();
	int arr[6]; for(int i=0;i<6;i++) arr[i]=v[i];
	answer(arr);
}

Compilation message

scales.cpp: In function 'void init(int)':
scales.cpp:35:15: warning: unused parameter 'T' [-Wunused-parameter]
   35 | void init(int T) {}
      |           ~~~~^
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 344 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Correct 1 ms 348 KB Output is correct
10 Correct 1 ms 348 KB Output is correct
11 Correct 1 ms 348 KB Output is correct
12 Correct 0 ms 348 KB Output is correct
13 Correct 0 ms 348 KB Output is correct
14 Correct 1 ms 348 KB Output is correct
15 Correct 1 ms 360 KB Output is correct
16 Correct 0 ms 348 KB Output is correct
17 Correct 0 ms 348 KB Output is correct
18 Correct 1 ms 604 KB Output is correct
19 Correct 0 ms 348 KB Output is correct
20 Correct 0 ms 348 KB Output is correct
21 Correct 0 ms 348 KB Output is correct
22 Correct 1 ms 348 KB Output is correct
23 Correct 0 ms 348 KB Output is correct
24 Correct 0 ms 344 KB Output is correct
25 Correct 0 ms 348 KB Output is correct
26 Correct 0 ms 600 KB Output is correct
27 Correct 0 ms 348 KB Output is correct
28 Correct 0 ms 348 KB Output is correct
29 Correct 0 ms 348 KB Output is correct
30 Correct 0 ms 348 KB Output is correct
31 Correct 0 ms 348 KB Output is correct
32 Correct 1 ms 348 KB Output is correct
33 Correct 1 ms 348 KB Output is correct
34 Correct 0 ms 344 KB Output is correct
35 Correct 0 ms 348 KB Output is correct
36 Correct 0 ms 348 KB Output is correct
37 Correct 0 ms 344 KB Output is correct
38 Correct 0 ms 348 KB Output is correct
39 Correct 0 ms 348 KB Output is correct
40 Correct 1 ms 348 KB Output is correct