1831 - Blitzcatan
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>