1D 게임
시간 제한2초메모리 제한1024 MB
위험한 턴에 임시 발판 위에 서지 않고 캐릭터가 L번 칸에 도달하는 가장 빠른 턴을 구합니다. 위험한 턴은 T턴마다 반복됩니다.
문제
SCSC에 갓 들어온 뉴비가 고인물들에게 자신의 실력을 보여주려고 게임을 만들었다.
게임은 간단하다. 캐릭터는 가장 왼쪽 끝의 번 칸부터 가장 오른쪽 끝의 번 칸까지 번호가 순서대로 매겨진 일렬의 개 칸 위를 움직인다. 캐릭터는 번 칸에서 출발해 번 칸에 도달해야 한다. 개 칸에는 영구 발판이, 나머지 개 칸에는 임시 발판이 놓여 있다. 임시 발판은 특정 턴이 되면 잠시 사라졌다가 다시 생기는데, 그때 임시 발판 위에 있던 캐릭터는 떨어져 패배한다. 이렇게 임시 발판이 사라지는 턴을 위험한 턴이라고 부른다. 시작점인 번 칸과 도착점인 번 칸에는 영구 발판이 놓여 있다.
각 턴은 다음 순서로 진행된다. 턴 번호는 부터 시작하며, 캐릭터는 번 칸에서 출발한다.
- 캐릭터가 번 칸에 있으면 승리하고 게임이 끝난다. 이때의 턴 번호를 승리 시간이라고 한다.
- 현재 턴이 위험한 턴이면 모든 임시 발판이 사라졌다가 다시 생긴다. 캐릭터가 임시 발판이 있었던 칸에 있으면 떨어져 패배하고 게임이 끝난다.
- 캐릭터는 현재 칸에서 왼쪽이나 오른쪽으로 칸 이동하거나 그 자리에 머문다. 번 칸에서는 왼쪽으로 이동할 수 없다.
- 턴이 끝나고 다음 턴이 시작되며, 턴 번호가 증가한다.
번 턴부터 번 턴까지 개의 위험한 턴이 있고, 턴 번호는 각각 , , , 번이다. 위험한 턴은 게임이 시작하는 번 턴부터 턴을 주기로 반복된다. 즉, 를 로 나눈 나머지 이 에 속하면 번 턴은 위험한 턴이다. 예를 들어 , , , 이면 , , , , , 번 턴이 위험한 턴이다.
뉴비는 게임 로직을 모두 완성했다. 하지만 발판 배치와 위험한 턴의 배열이 주어졌을 때 얼마나 빨리 승리할 수 있는지는 잘 모른다. 뉴비를 도와 가장 빨리 승리할 수 있는 시간을 구해 주자.
입력
첫째 줄에 정수 와 이 공백으로 구분되어 주어진다. (; ; )
둘째 줄에 정수 과 가 공백으로 구분되어 주어진다. (; ; )
셋째 줄에 번 턴과 번 턴 사이에 발생하는 개의 위험한 턴 번호 , , , 이 공백으로 구분되어 오름차순으로 주어진다. ()
넷째 줄에 영구 발판이 놓인 개 칸의 번호 , , , 가 공백으로 구분되어 오름차순으로 주어진다. (; ; )
출력
가능한 승리 시간의 최솟값을 출력한다. 유한 번의 턴 안에 승리할 수 없다면 What is that map newbie...를 출력한다.
번 칸에 도착하는 즉시 게임이 끝나는 것이 아니라, 다음 턴이 시작된 뒤 과정 1에서 게임이 끝난다는 점에 유의하라.
힌트
C/C++, Java 등의 언어에서 일부 변수를 int로 선언하면 오버플로우가 발생할 수 있으니 주의하라.