동결된 스코어보드와 남은 제출 기록이 주어질 때, B가 기록을 조작해 A를 확실히 앞설 수 있는지 판정하고 사전순으로 가장 작은 조작 방법을 출력한다.
어려움8그리디구현완전 탐색게임 이론아직 제출이 없습니다시간 제한1초메모리 제한128 MB대회 순위는 이렇게 정한다. 푼 문제 수가 많은 사람이 위에 온다. 푼 문제 수가 같으면 페널티가 낮은 사람이 위에 온다.
페널티는 푼 문제에 대해서만 계산한다. 어떤 문제를 처음 맞히기까지 제출한 횟수가 k번이면 그 문제의 페널티는 (k−1)×20이고, 푼 문제마다 구한 값을 모두 더한 것이 그 사람의 페널티다.
이미 맞힌 문제에 다시 제출해도 페널티는 달라지지 않는다. 대회가 끝날 때까지 맞히지 못한 문제는 몇 번을 틀렸든 페널티에 더하지 않는다. 실제 대회라면 맞힌 시각도 페널티에 들어가지만, 이 문제에서는 시각을 무시하고 제출 횟수만 본다.
대회가 시작한 지 4시간이 지나자 스코어보드가 더 이상 갱신되지 않았다. B는 이 대회에서 꼭 우승하고 싶지만 강력한 우승 후보 A를 이길 자신이 없었다. 잠시 고민한 B는 스코어보드가 멈춰 있다는 점을 이용해 기록을 조작하고 우승 상금을 타기로 했다.
앞으로 들어올 제출 로그마다 B는 아래 네 가지 중 하나를 적용한다.
B는 대회가 끝날 때까지 들어올 제출 로그를 모두 분석해 두었다. A와 B가 아닌 다른 학생이 우승할 가능성이 없다는 것도 알아냈다.
당신은 불의를 싫어하지만 이 문제 자체는 제법 재미있다고 생각했다. 남은 제출 로그를 조작해서 B가 A를 이기고 우승할 수 있는지 판정하라.
첫째 줄에 대회 문제의 수 Q와 남은 제출 로그의 수 N이 주어진다. (1≤Q≤20, 1≤N≤105)
둘째 줄에 A가 지금까지 푼 문제 수 NA와 B가 지금까지 푼 문제 수 NB가 주어진다. (0≤NA,NB≤Q)
셋째 줄에 A가 푼 문제 번호 NA개가 오름차순으로 주어진다. 넷째 줄에 B가 푼 문제 번호 NB개가 오름차순으로 주어진다. 푼 문제가 없는 학생의 줄은 빈 줄로 주어진다. 문제 번호는 1 이상 Q 이하의 정수이고, 한 줄에 같은 번호가 두 번 주어지지 않는다.
다섯째 줄에 A의 현재 페널티 PA와 B의 현재 페널티 PB가 주어진다. (0≤PA,PB≤2×106) 푼 문제가 없는 학생의 페널티는 항상 0이다.
이어지는 N개 줄에 남은 제출 로그가 제출된 순서대로 주어진다. 각 줄은 정수 세 개 X Y Z로 이루어진다. X는 1, 2, 3 중 하나로, 1이면 A의 로그, 2이면 B의 로그, 3이면 다른 학생의 로그다. Y는 문제 번호로 1 이상 Q 이하다. Z는 0이면 틀렸다는 뜻이고, 1이면 맞혔다는 뜻이다.
A와 B는 지금까지 맞힌 문제를 빼면 나머지 문제에 제출한 적이 한 번도 없다.
이미 맞힌 문제에 다시 제출해서 맞거나 틀려도 그 사람의 푼 문제 수와 페널티는 달라지지 않는다. 그런 제출도 몇 번이든 들어올 수 있다. 제출한 사람은 아무 영향을 받지 않지만, 조작하면 다른 사람에게 영향을 줄 수도 있다.
로그를 조작해서 B가 우승할 수 있으면 첫째 줄에 YES를, 불가능하면 NO를 출력한다. A와 B의 푼 문제 수와 페널티가 모두 같으면 B가 진 것으로 본다.
YES를 출력했다면 이어지는 N개 줄에 각 로그를 어떤 방식으로 조작했는지 1, 2, 3, 4 중 하나로 순서대로 출력한다. 답이 여러 가지면 그중 사전 순으로 가장 앞선 것을 출력한다.