728x90

https://www.acmicpc.net/problem/1057

 

1057번: 토너먼트

김지민은 N명이 참가하는 스타 토너먼트에 진출했다. 토너먼트는 다음과 같이 진행된다. 일단 N명의 참가자는 번호가 1번부터 N번까지 배정받는다. 그러고 난 후에 서로 인접한 번호끼리 스타를 한다. 이긴 사람은 다음 라운드에 진출하고, 진 사람은 그 라운드에서 떨어진다. 만약 그 라운드의 참가자가 홀수명이라면, 마지막 번호를 가진 참가자는 다음 라운드로 자동 진출한다. 다음 라운드에선 다시 참가자의 번호를 1번부터 매긴다. 이때, 번호를 매기는 순서는 처음

www.acmicpc.net

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

vector<int> arr[18];

int main() {
	int n, a, b;
	cin >> n >> a >> b;
	for (int i = 1; i <= n; i++) {
		arr[0].push_back(i);
	}
	int row = 0;
	int result;
	bool flag = false;
	while (true) {
		for (int i = 0; i < arr[row].size(); i += 2) {
			if (i + 1 >= arr[row].size()) {
				arr[row + 1].push_back(arr[row][i]);
			}
			else if ((arr[row][i] == a || arr[row][i] == b) && (arr[row][i + 1] == a || arr[row][i + 1] == b)) {
				result = row + 1;
				flag = true;
				break;
			}
			else {
				if (arr[row][i] == a || arr[row][i] == b) {
					arr[row + 1].push_back(arr[row][i]);
				}
				else if (arr[row][i + 1] == a || arr[row][i + 1] == b) {
					arr[row + 1].push_back(arr[row][i + 1]);
				}
				else {
					arr[row + 1].push_back(arr[row][i]);
				}
			}
		}
		if (flag) break;
		row++;
	}
	cout << result;
	return 0;
}
728x90

'알고리즘 문제' 카테고리의 다른 글

[백준] 1520번 내리막 길  (0) 2020.03.11
[백준] 2293번 동전 1  (0) 2020.03.08
[백준] 2309번 일곱 난쟁이  (0) 2020.03.07
[백준] 3053번 택시 기하학  (0) 2020.03.07
[백준] 1002번 터렛  (0) 2020.03.07

+ Recent posts