OSO P15797


Statement
 

pdf   zip

thehtml

En aquest problema haureu de calcular la probabilitat de guanyar al joc de l’OSO, en una versió simplificada. Suposeu un tauler 3 × 3, inicialment buit, on per torns s’hi ha de posar una ‘S’ o una ‘O’ a qualsevol casella lliure. Guanya el primer que aconsegueix escriure “OSO” horitzontalment o verticalment (no diagonalment). Si el tauler s’omple sense que ningú aconsegueixi fer un “OSO”, la partida acaba en empat.

Donat un tauler amb una posició actual del joc, on encara no hi ha cap “OSO”, calculeu la probabilitat que la partida la guanyi el jugador a qui li toca jugar ara, acabi en empat, o la guanyi l’altre jugador. Suposeu que es juga totalment a l’atzar, tant a l’hora d’escollir una casella com decidint si s’hi posa una ‘S’ o una ‘O’.

Entrada

L’entrada comença amb el nombre de taulers t, seguit de t taulers.

Sortida

Per a cada tauler, escriviu les tres probabilitats demanades amb quatre dígits decimals. Per fer-ho, poseu aquestes dues línies al principi del vostre main:

    cout.setf(ios::fixed);
    cout.precision(4);

Observació

Per assegurar que el vostre programa no escrigui mai -0.0000, sumeu 1e-8 a cada real abans d’escriure’l. A part d’això, els jocs de proves no tenen problemes de precisió.

Public test cases
  • Input

    3
    
    .SO
    SSS
    OSS
    
    SSO
    OS.
    SS.
    
    ...
    ...
    ...
    

    Output

    0.5000 0.5000 0.0000
    0.2500 0.2500 0.5000
    0.2962 0.4688 0.2351
    
  • Information
    Author
    Salvador Roura
    Language
    Catalan
    Official solutions
    C++
    User solutions
    C++