체육관 게임

면접 대비

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

요약
바구니별 카드 개수를 나타내는 N×N 행렬이 주어질 때, 바구니 1에서 시작하는 마르코프 과정의 처음 10단계 확률 분포를 계산한다.
난이도

쉬움10점 중 3점

유형
수학, 행렬, 시뮬레이션, 확률
정답자
아직 제출이 없습니다

문제

체육 시간에 초등학생들이 하는 게임을 확률 과정으로 모형화한다.

게임 설정은 다음과 같다.

  • 체육관 바닥의 여러 위치에 NN개의 바구니가 놓여 있고, 각 바구니에는 서로 구분되는 그림이 붙어 있다.
  • 각 바구니 안에는 여러 장의 카드가 들어 있으며, 각 카드에는 이동할 목적지 바구니가 적혀 있다.

진행 방식: 아이들은 지정된 시작 바구니에 모인다. 각자 차례대로 바구니에서 카드 한 장을 무작위로 뽑아 목적지를 외운 뒤, 다음 아이가 뽑기 전에 카드를 도로 넣는다. 선생님이 호루라기를 불면 모든 아이는 자신이 뽑은 카드에 적힌 바구니로 이동한다.

각 바구니의 카드 구성이 주어질 때, 게임의 처음 10단계 동안 한 아이가 각 바구니에 있을 확률을 구하여라.

예를 들어 바구니가 "tree", "house", "car", "park" 네 개이고, 카드 구성이 다음과 같다고 하자.

  • "tree" 바구니: "tree" 2장, "house" 1장, "car" 2장
  • "house" 바구니: "tree" 1장, "car" 1장, "park" 2장
  • "car" 바구니: "tree" 1장
  • "park" 바구니: 각 종류 1장씩

이를 표로 정리하면 다음과 같다.

바구니 \ 목적지treehousecarpark
tree2120
house1012
car1000
park1111

모두 첫 번째 바구니(tree)에서 시작하므로, 처음에는 P0(tree)=1P_0(\text{tree}) = 1이고 나머지 바구니의 P0=0P_0 = 0이다.

게임 도중 어떤 단계에서 새 위치에 있을 확률은, 직전 단계에 각 위치에 있을 확률과 그 위치에서 새 위치로 이동할 확률의 곱을 모든 위치에 대해 더한 값과 같다. 위 예에서는

Ps+1(tree)=0.40 Ps(tree)+0.25 Ps(house)+1.00 Ps(car)+0.25 Ps(park)P_{s+1}(\text{tree}) = 0.40\,P_s(\text{tree}) + 0.25\,P_s(\text{house}) + 1.00\,P_s(\text{car}) + 0.25\,P_s(\text{park})

이다. (예를 들어 tree에서 tree로 갈 확률은 2/5=0.402/5 = 0.40, house에서 tree로 갈 확률은 1/4=0.251/4 = 0.25이다.)

게임은 항상 첫 번째 바구니에서 시작한다.

입력

입력은 카드 개수 표이며 NN개의 줄로 이루어진다. ii번째 줄에는 ii번 바구니에 들어 있는 카드 개수가 목적지 순서대로 NN개의 정수로 주어진다. 즉 jj번째 값은 ii번 바구니 안에 있는 "jj번 바구니로 가는" 카드의 장수이다.

바구니 개수 NN은 입력의 줄 수(그리고 한 줄에 있는 정수의 개수)와 같으며 2≤N≤102 \le N \le 10이다. 한 바구니 안에서 같은 목적지 카드는 최대 10장까지 있을 수 있고, 각 바구니에는 카드가 적어도 한 장 들어 있다(각 줄의 합은 1 이상이다).

출력

정확히 10개의 줄을 출력한다. ss번째 줄(s=0,1,…,9s = 0, 1, \dots, 9)에는 시작 후 ss단계가 지났을 때 아이가 각 바구니에 있을 확률 Ps(1),Ps(2),…,Ps(N)P_s(1), P_s(2), \dots, P_s(N)을 공백으로 구분하여 출력한다. 첫 줄은 시작 분포이므로 첫 번째 바구니가 1.000001.00000, 나머지가 0.000000.00000이다.

각 확률은 소수점 아래 다섯 자리로 반올림하여 출력한다(예: 1.00000). 내부 계산은 배정밀도(double) 실수 연산으로 수행하기를 권장한다.

예제1

  1. 예제 1

    입력
    2 1 2 0
    1 0 1 2
    1 0 0 0
    1 1 1 1
    
    예상 출력
    1.00000 0.00000 0.00000 0.00000
    0.40000 0.20000 0.40000 0.00000
    0.61000 0.08000 0.21000 0.10000
    0.49900 0.14700 0.28900 0.06500
    0.54160 0.11605 0.25260 0.08975
    0.52069 0.13076 0.26809 0.08046
    0.52917 0.12425 0.26108 0.08549
    0.52519 0.12721 0.26411 0.08350
    0.52686 0.12591 0.26275 0.08448
    0.52609 0.12649 0.26334 0.08408