1831 - Blitzcatan

From Bitnami MediaWiki

Cerința[edit | edit source]

Î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[edit | edit source]

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[edit | edit source]

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[edit | edit source]

  • 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[edit | edit source]

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

Exemplul 2[edit | edit source]

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

Rezolvare[edit | edit source]

<syntaxhighlight lang="python3" line="1">

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}")


</syntaxhighlight>