-
BOJ 1057 : 토너먼트알고리즘 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; }
'알고리즘' 카테고리의 다른 글
BOJ 1292: 쉽게 푸는 문제 (0) 2023.06.12 BOJ 2004:조합 0의 개수 (1) 2023.06.12 BOJ 1011: Fly me to the Alpha Centaur (0) 2023.06.11 BOJ 1476: 날짜 계산 (1) 2023.06.10 BOJ 9613: GCD 합 (2) 2023.06.10