Caminho de Bêbado

시간 제한0.5초메모리 제한1024 MB

요약
술집 사이의 이동 확률이 주어질 때, 무한히 많은 잔을 마신 뒤 술취한 사람이 가장 높은 확률로 머무는 술집을 구한다.
난이도

보통10점 중 6점

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

문제

Desde que saiu da cadeia, Marcos não consegue parar de beber. Ele, um ex-maratonista, havia sido preso injustamente sob acusação de roubar questões de competições de programação e vendê-las para competidores russos e chineses. Depois de 5 longos anos na cadeia, ele foi considerado inocente por falta de provas. Porém, passar tanto tempo atrás das grades de forma injusta o fez entrar em depressão e, desde então, passa todas as suas noites andando de bar em bar, de esquina em esquina. Você, como melhor amigo de Marcos, já está cansado de sempre ter que procurá-lo pela cidade depois de suas noites de bebedeira e resolveu facilitar sua própria vida criando um programa que tenta prever onde encontrar Marcos ao final de suas noites.

Toda noite, antes de sair para beber, Marcos avisa a você a qual bar da cidade ele vai, assim você sempre sabe onde sua noite de bebedeira começa. Depois disso, depois de cada dose bebida, há uma certa chance de Marcos ir a outro bar. Você sabe uma maneira simples de estimar essa chance: a probabilidade de Marcos ir a outro bar é proporcional 'a divisão da qualidade do bar pela distância entre o bar onde ele está agora e o bar de destino. Também há uma chance de Marcos continuar no mesmo bar, que é proporcional 'a raíz da qualidade daquele bar.

A qualidade do bar ii é dada por Q_iQ\_i e a distância entre os bares ii e jj é dada por D_i,j=D_j,iD\_{i,j} = D\_{j,i}. Assim, de maneira geral, a probabilidade P_i,jP\_{i,j} de Marcos ir do bar ii ao bar jj é dada por:

\begin{equation} P\_{i,j} = \displaystyle\frac{\displaystyle\frac{Q\_j}{D\_{i,j}}}{\displaystyle\sum\_{k \ne i}{\displaystyle\frac{Q\_k}{D\_{i,k}} + \sqrt{Q\_i}}} \end{equation}

Já a probabilidade de Marcos permanecer no mesmo bar é dada por:

\begin{equation} P\_{i,i} = \displaystyle\frac{\sqrt{Q\_i}}{\displaystyle\sum\_{k \ne i}{\displaystyle\frac{Q\_k}{D\_{i,k}} + \sqrt{Q\_i}}} \end{equation}

Note que as fórmulas garantem a seguinte propriedade:

\begin{equation} \sum\_{j=1}^{n}{P\_{i,j}} = 1\text{, }\forall 1 \le i \le n \end{equation}

Como Marcos bebe muito mais que a média, uma das histórias que ele mais gosta de contar quando está bêbado é a de como ele ganhou um campeonato russo de virada de vodka, você sabe que ele pode tomar uma quantidade arbitrariamente grande de doses. Para fins práticos, assuma que Marcos bebe uma quantidade infinita de doses numa noite.

Assim, dados como entrada os bares, suas qualidade e suas distâncias, faça um programa que descubra em qual bar Marcos estará com maior probabilidade depois de sua noite de bebedeira.

Dica: Não se esqueça que a probabilidade de Marcos estar em um bar é sempre igual a 1.

입력

A entrada possui vários casos de teste. Cada caso de teste começa com uma linha que contém dois inteiros nn e bb, 1≤b≤n≤1001 ≤ b ≤ n ≤ 100, que representam a quantidade de bares na cidade e o bar no qual Marcos começa sua noite.

Em seguida, a entrada contém nn linhas com um inteiro cada, onde o inteiro da ii-ésima representa a qualidade do bar ii. Por fim, seguem nn linhas com nn inteiros cada, representando a distância entre o bar da ii-ésima linha ao bar do jj-ésimo inteiro da linha. Você pode assumir 0≤Q_i,D_i,j≤10000 ≤ Q\_i , D\_{i,j} ≤ 1000 para todo ii e jj.

A entrada termina com uma linha “0 0” que não deve ser processada.

출력

Seu programa deve produzir uma linha de saída para cada caso de teste. Esta linha deve conter apenas um inteiro relativo ao índice do bar onde há a maior probabilidade de Marcos estar. Em caso de empate, imprima o valor relativo ao bar de menor índice.

예제1

  1. 예제 1

    입력
    3 1
    1
    2
    3
    0 1 2
    1 0 2
    2 2 0
    4 1
    3
    8
    5
    7
    0 1 2 3
    1 0 5 3
    2 5 0 4
    3 3 4 0
    0 0
    
    예상 출력
    3
    2