알고리즘
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;
}