BOJ 26017 Guessing Game
문제 내용
월요일부터 일요일까지 일주일 동안 열리는 경기 이벤트가 있습니다. 이 이벤트의 참가자들은 팀 레드와 팀 블루로 나뉘어서 경기에 참가하며, 번째 날에는 개의 경기가 열립니다. 각 경기의 엔트리는 그 경기가 열리기 일주일 전에 공개됩니다.
당신은 명의 친구들과 내기를 하려고 합니다. 하루에 한 경기씩을 골라 총 7개의 경기에 대해 팀 레드가 이길지, 팀 블루가 이길지를 예측하는 방식입니다. 예측이 맞은 경기의 수가 가장 많은 사람이 우승합니다.
하지만, 당신은 예측을 제때 내지 않았다는 사실을 뒤늦게 깨달았습니다. 엔트리가 공개된 경기는 예측을 써낼 수 없으므로, 마지막 이틀에 대한 예측만 써서 내려고 합니다. 이때 당신이 우승할 확률이 조금이라도 있을까요?
입력
첫 번째 줄에는 친구들의 수 이 주어집니다. ()
두 번째 줄에는 각 날짜에 열리는 경기의 수 이 주어집니다. ()
다음 줄에 걸쳐서, 각각의 친구가 예측한 7경기의 승자가 주어집니다. 각각의 날짜에 대해, 그 날의 번째 경기를 팀 레드가 이길 것이라고 예측했다면 가, 팀 블루가 이길 것이라고 예측했다면 가 주어집니다.
마지막으로, 당신이 예측한 두 경기의 승자가 같은 형식으로 주어집니다. 첫 번째 수는 6번째 날에 대한 예측이고, 두 번째 수는 7번째 날에 대한 예측입니다.
출력
당신이 우승할 가능성이 있으면 possible, 없으면 impossible을 출력합니다.
문제 풀이
스포일러
당신이 우승하는 가능성은 크게 두 가지가 있습니다.
- 당신의 예측이 적어도 하나 맞고, 친구들의 모든 예측이 틀린 경우
- 당신의 예측이 둘 다 맞고, 각 친구의 예측이 최대 하나만 맞은 경우
첫 번째 경우는, 친구들의 예측의 합집합을 구해서 서로 모순이 없는지, 당신의 예측 중 적어도 하나가 모든 친구들의 예측과 다른지를 판별하여 확인할 수 있습니다.
두 번째 경우는, 다음과 같이 2-SAT으로 모델링할 수 있습니다.
- 친구 에 대해, 번째 예측과 번째 예측 중 최대 하나만 맞습니다. 이는 “번째 예측이 틀렸다 OR 번째 예측이 틀렸다"로 나타낼 수 있습니다.
- 당신의 두 예측이 모두 맞습니다. 이는 “번 예측이 맞았다 OR 번 예측이 맞았다"로 나타낼 수 있습니다.
이 2-SAT 문제를 풀었을 때 답이 존재하는지 여부로 확인하면 됩니다.