※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 14006번 문제인 Large Ping Pong Tournament이다.
문제는 아래 링크를 확인하자.

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

 

14006번: Large Ping Pong Tournament

The input will start with a line containing a single integer N. The following 2N lines will each contain an integer indicating the total number of points scored by some player. Dudu's score is given first. 0 ≤ N ≤ 18. All scores will be non-negative i

www.acmicpc.net

한 경기에서 선수가 0점을 낼 수도 있음에 유의하자.

 

먼저, 참가한 선수가 Dudu 한 명이라면(N=0) 당연히 Dudu가 우승하므로 답은 "YES"가 된다. N>0인 경우를 살펴보자.

 

첫 라운드에 탈락하는 사람은 자신이 기록한 모든 점수를 전부 첫 라운드에 기록하고 탈락해야하므로, Dudu를 제외한 2^N - 1명 중 "Dudu의 총 점수" 이하인 총 점수를 기록한 사람이 없다면 Dudu는 우승할 수 있는 방법이 존재하지 않는다.

 

반면, 첫 라운드를 Dudu가 통과할 수 있다면, 첫 라운드에서 각자가 기록한 모든 점수를 전부 내고 다음 라운드서부터는 모든 경기를 0:0으로 마쳐 팔씨름으로 결과를 내는 경우가 있을 수 있으므로 Dudu가 우승할 수 있는 방법이 항상 존재한다.

 

따라서, 2^N - 1명의 점수 중 중 "Dudu의 총 점수" 이하인 총 점수를 기록한 사람이 없다면 "NO"를, 아니면 "YES"를 출력하는 것으로 문제를 해결할 수 있다.

 

아래는 제출한 소스코드이다.

#include <iostream>
using namespace std;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	int N; cin >> N;
	if (N == 0) {
		cout << "YES";
		return 0;
	}
	int total = (1 << N);
	int dudu, mn = 1000000007; cin >> dudu;
	for (int i = 1; i < total; i++) {
		int x; cin >> x;
		mn = min(mn, x);
	}

	if (mn <= dudu) cout << "YES";
	else cout << "NO";
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 14007 // C++] Small Weird Measurements  (0) 2022.05.13
[BOJ 14008 // C++] Medium Weird Measurements  (0) 2022.05.13
[BOJ 14005 // C++] Small Ping Pong Tournament  (0) 2022.05.12
[BOJ 14004 // C++] ICPC  (0) 2022.05.11
[BOJ 1013 // C++] Contact  (0) 2022.05.10

+ Recent posts