아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

미니멀 백개먼

시간 제한1초메모리 제한128 MB

요약
말이 한 개인 미니 백개먼에서 한 턴 쉬기, 시작으로 되돌아가기, 초과 이동 시 반사 규칙을 반영해 T턴 이내에 목표에 도달할 확률을 구하는 문제입니다.
난이도

보통10점 중 5점

유형
동적 계획법, 시뮬레이션, 확률
정답자
아직 제출이 없습니다

문제

백개먼을 아주 단순하게 바꾼 1인용 변형 게임 “미니멀 백개먼”을 소개한다. 이 게임은 한 명의 플레이어가 주사위 하나와 말(플레이어의 토큰) 하나만으로 진행한다.

게임판은 00번(출발점)부터 NN번(도착점)까지 번호가 매겨진 N+1N + 1개의 칸이 한 줄로 놓인 형태다. 처음에 말은 출발점(칸 00)에 놓이며, 목표는 말을 도착점(칸 NN)으로 옮기는 것이다. 매 턴마다 플레이어는 주사위를 굴리는데, 주사위는 11부터 66까지의 정수를 각각 같은 확률로 보여 주며, 말은 나온 수만큼 앞으로 나아간다.

말은 도착점을 지나칠 수 없다. 굴린 값이 말을 도착점 너머로 보내는 경우, 말은 도착점까지 간 뒤 초과한 칸 수만큼 도착점에서 되돌아온다. 예를 들어 말이 칸 N−3N - 3에 있을 때 55가 나오면, 도착점을 넘는 초과분이 22이므로 말은 칸 N−2N - 2로 간다. 다음 턴에는 다시 평소처럼 도착점을 향해 나아간다.

출발점과 도착점을 제외한 각 칸에는 다음 두 가지 특수 지시 중 하나가 있을 수 있다.

  • 한 턴 쉬기: 말이 이 칸에 멈추면, 다음 턴에는 말을 움직일 수 없다.
  • 출발점으로 돌아가기: 말이 이 칸에 멈추면, 말은 즉시 출발점(칸 00)으로 돌아간다.

게임판의 구성(크기 NN과 특수 칸들의 위치)이 주어질 때, 주어진 턴 수 안에 게임을 성공(말이 도착점에 도달)할 확률을 구하시오.

입력

입력은 여러 개의 데이터셋으로 이루어진다. 각 데이터셋의 형식은 다음과 같다.

N T L B
Lose_1
...
Lose_L
Back_1
...
Back_B

NN은 도착점의 번호로 5≤N≤1005 \le N \le 100을 만족한다. TT는 턴 수이며, TT턴 안에 성공할 확률을 구해야 한다. TT는 1≤T≤1001 \le T \le 100을 만족한다. LL은 “한 턴 쉬기”로 표시된 칸의 개수로 0≤L≤N−10 \le L \le N - 1을 만족한다. BB는 “출발점으로 돌아가기”로 표시된 칸의 개수로 0≤B≤N−10 \le B \le N - 1을 만족한다. 이 네 값은 공백으로 구분된다.

Lose 목록의 각 값은 “한 턴 쉬기” 칸의 번호로 1≤1 \le 값 ≤N−1\le N - 1을 만족하며, 서로 다르고 오름차순으로 주어진다. Back 목록의 각 값은 “출발점으로 돌아가기” 칸의 번호로 1≤1 \le 값 ≤N−1\le N - 1을 만족하며, 서로 다르고 오름차순으로 주어진다. 같은 번호가 Lose 목록과 Back 목록에 동시에 나오는 일은 없다.

입력의 끝은 공백으로 구분된 네 개의 00으로 이루어진 줄로 표시된다.

출력

각 데이터셋에 대해, 주어진 턴 수 안에 게임을 성공할 확률을 소수점 아래 정확히 여섯 자리로 반올림하여 한 줄에 출력한다 (예: printf("%.6f")).

예제1

  1. 예제 1

    입력
    6 1 0 0
    7 1 0 0
    7 2 0 0
    6 6 1 1
    2
    5
    7 10 0 6
    1
    2
    3
    4
    5
    6
    0 0 0 0
    
    예상 출력
    0.166667
    0.000000
    0.166667
    0.619642
    0.000000