https://www.acmicpc.net/problem/1057
간단한 수학 문제다.
a와 b가 토너먼트에서 만나는 라운드를 계산하면 된다.
각 라운드는 홀수번째, 짝수번째가 만나서 싸운다.
매 라운드마다 대결하는 상대끼리 항상 짝수번째 위치가 홀수번째 위치보다 1이 크다.
사람수가 홀수인 경우 마지막 번호는 부전승이다.
홀수번째인 경우는 2로 나눈 몫의 1을 더한 값이 다음 라운드의 번호가 된다.
짝수번째인 경우는 2로 나눈 몫이 다음 라운드의 번호가 된다.
#include <iostream>
using namespace std;
int main() {
int round = 1;
int a, b, people; //a의 번호, b의 번호, people은 참여자 수
cin >> people >> a >> b;
while (1) {
if ((a - b == 1 && a % 2 == 0 && b % 2 == 1) || (b - a == 1) && b % 2 == 0 && a % 2 == 1) { //둘의 위치가 1차이면서 짝수의 값이 홀수의 값보다 크면
break;
}
if (a % 2 == 1) { //a가 홀수인 경우
a = a / 2 + 1; //a를 2로 나눈 몫의 1을 더한다.
}
else { //a가 짝수인 경우
a = a / 2; //a를 2로 나눈 몫으로 둔다.
}
if (b % 2 == 1) { //b가 홀수인 경우
b = b / 2 + 1; //b를 2로 나눈 몫의 1을 더한다.
}
else { //b가 짝수인 경우
b = b / 2; //b를 2로 나눈 몫으로 둔다.
}
round++; //반복문을 돌 때마다 라운드를 1씩 증가한다.
}
cout << round;
}
'백준' 카테고리의 다른 글
백준4963 - 섬의 개수 (0) | 2019.07.07 |
---|---|
백준1966 - 프린터 큐 (0) | 2019.07.06 |
백준1333 - 부재중전화 (0) | 2019.07.01 |
백준1613 - 역사 (0) | 2019.06.29 |
백준1021 - 회전하는 큐 (0) | 2019.06.29 |