알고리즘

BOJ 1057 : 토너먼트

minbear 2023. 6. 12. 13:08

#BOJ 1057 : 토너먼트

 

1057번: 토너먼트

김지민은 N명이 참가하는 스타 토너먼트에 진출했다. 토너먼트는 다음과 같이 진행된다. 일단 N명의 참가자는 번호가 1번부터 N번까지 배정받는다. 그러고 난 후에 서로 인접한 번호끼리 스타를

www.acmicpc.net

#풀이

토너먼트 씩으로 2명씩 짝지어서 대결을 한다.

 

토너먼트는 참가자들이 0.5 배씩 줄어든다

 

9명을 예를 들면

                1,2

           1,2/       3

    1,2/     3,4/       5

1,2/ 3,4/ 5,6/ 7,8/ 9

이런 식으로 진행된다.

근데 잘생각 해보면 자신이 가지고 있는 번호를 /2를 하고 올림을 하면 그 다음 라운드의 번호를 가질 수 있다.

 

그리고 대결을 하려면 무조건 큰 번호를 가진 사람은 짝수이여하고 작은 번호를 가진 사람은 홀수 이여야 한다. 

 

#코드

#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
int n, k, h;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	
	cin >> n >> k >> h;
	int ans = 1;
	while (ans <= ceil(n / 2.0))
	{
		cout << "k :" << k << '\n';
		cout << "h :" << h << '\n';
		if((k - h == 1 && k % 2 == 0) || (h-k == 1 && h%2==0))
		{
			cout << ans << '\n';
			return 0;
		}
		k = (int)ceil(k / 2.0);
		h = (int)ceil(h / 2.0);
		ans++;
	}
	cout << -1 << '\n';
	return 0;
}