1831 - Blitzcatan

De la Universitas MediaWiki

Cerința

În clasa a 10-a Alina, Bogdan şi Clara se întâlneau în fiecare săptămână să se joace BlitzCatan. Ei aveau la dispoziţie o repriză de 2 ore pe care o foloseau din plin, fiecare joc durând cel puţin 30 de minute. Cei trei prieteni, dornici să reţină cine a câştigat fiecare joc au vrut sa noteze într-un carneţel. Ei s-au temut ca cineva le va citi carneţelul, aşa că au procedat astfel:

  • la finalul unui joc i, câştigătorul c, alege un număr secret mi
> 0 astfel încât mi
% 3 = c (Alina alege un multiplu de 3 când câştigă, Bogdan un multiplu de 3+1, Clara un multiplu de 3+2)
  • la finalul celor 2 ore, ei calculează T=∑i=0J(mi–1)∗mi∗(mi+1)
unde J este numărul de jocuri, şi notează T în carneţel

La reuniunea de 10 ani după liceu Alina, Bogdan şi Clara dau de carneţel. Fiecare din ei crede ca el/ea a câştigat cele mai multe jocuri. Ei nu au timp să verifice decriptând semnificaţia numerelor din carneţel, aşa că te roagă pe tine să îi ajuţi, spunându-le pentru fiecare număr din el, câte jocuri reprezintă, cine a câştigat fiecare din ele, şi cu ce număr secret.

Date de intrare

Fişierul blitzcatan.in va conţine: pe prima linie N – numărul de numere din carneţel şi pe următoarea linie T1T2…TN

cele N numere separate prin câte un spaţiu

Date de ieșire

In fişierul blitzcatan.out se vor afişa N linii: pe linia i se afişează J numărul de jocuri jucate în repriza I şi J perechi de numere ci, mi, separate prin spaţiu, unde ci este câştigătorul, iar mi este numărul ales de câştigător.

Restricții și precizări

  • Se garantează că există o soluţie pentru fiecare repriză.
  • Pentru fiecare repriza Ti, dacă există mai multe soluţii, se va afişa cea care conţine un număr minim de jocuri. Nu contează ordinea în care se scriu cele J perechi de numere.
  • 0 < Ti <= 109, pentru fiecare repriza i
  • N <= 10

Exemplul 1

blitzcatanin.txt
2
120 1001616
blitzcatnout.txt
Datele introduse corespund restrictiilor impuse.
1 2 5
2 0 12 1 100

Exemplul 2

blitzcatnain.txt
-1
865 -736582
blitzcatnaout.txt
Datele de intrare nu corespund restrictiilor impuse.

Rezolvare

def decodificare_carnetel(J, T):
    rezultate = []

    # Iterăm prin toate jocurile pentru a decodifica numerele din carnețel
    for i in range(J):
        # Formula pentru a obține mi
        mi = int(((9 + 12 * T + (12 * J - 3) * i * (i + 1)) ** 0.5 - 3) / 6) + 1

        # Calculăm câștigătorul și numărul secret corespunzător
        c = mi % 3
        castigator = ""
        if c == 0:
            castigator = "Alina"
        elif c == 1:
            castigator = "Bogdan"
        elif c == 2:
            castigator = "Clara"

        rezultate.append((i + 1, castigator, mi))

    print(f"Jocul {joc}: Câștigător - {castigator}, Număr secret - {secret}")