2176 - Ruleta

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

Nicuşor este elev în clasa a VI-a şi s-a gândit că este suficient de mare ca să inventeze un joc nou. Are doar o foaie de hârtie şi un pix. Scrie mai întâi n numere naturale în cerc. Acestea formează Ruleta numerelor. Jocul se desfăşoară după următoarele reguli:

- se parcurge şirul numerelor în sensul deplasării acelor de ceasornic;

- se porneşte de fiecare dată de la acelaşi element;

- se execută de fiecare dată o rotaţie completă;

- fiecare element nenul se scade din elementul imediat următor doar dacă este mai mic sau egal cu acesta şi nenul;

Exemplu. Dacă notăm cu R1, R2, R3, R4, R5, R6, R7, R8 şirul numerelor ce formează ruleta din figura 1, atunci, o rotaţie completă realizează următoarele modificări asupra numerelor din listă:

- ruleta se opreşte atunci când execută o rotaţie completă şi nu se modifică nici o valoare din şirul elementelor.

Exemplu. Pentru ruleta din figura 1 se execută 4 rotaţii (dintre care 3 în care se fac modificări):

Cerința

Scrieţi un program care să determine, pentru un şir de n numere naturale care indică starea iniţială a ruletei, numărul r de rotaţii complete efectuate respectând regulile jocului până la încheierea acestuia şi numărul t al elementelor nenule aflate în şir la încheierea jocului.

Date de intrare

Fişierul de intrare ruleta.in conţine pe prima linie numărul n de numere naturale aşezate în cerc iar pe linia a doua, separate prin câte un spaţiu, cele n valori , în ordinea deplasării, începând cu elementul de la care porneşte ruleta.

Date de ieșire

Fişierul de ieşire ruleta.out conţine pe prima linie, separate printr-un spaţiu, valorile r şi t (în această ordine).

Restricții și precizări

  • 2 ≤ n ≤ 10000;
  • numerele de pe ruletă sunt numere naturale mai mici sau cel mult egale cu 30000;

Exemplu:

ruleta.in

8
1 2 3 4 3 2 3 1

ruleta.out

4 3
def roulette_game(numbers):
    n = len(numbers)
    rotations = 0
    modified = True

    while modified:
        modified = False
        rotations += 1
        new_numbers = numbers[:]
        for i in range(n):
            if numbers[i] != 0 and numbers[i] <= numbers[(i + 1) % n]:
                new_numbers[(i + 1) % n] -= numbers[i]
                modified = True
        numbers = new_numbers

    non_zero_count = sum(1 for x in numbers if x != 0)
    return rotations, non_zero_count

# Exemplu de utilizare
initial_numbers = [3, 4, 5, 6, 7, 8, 9, 10]
rotations, non_zero_count = roulette_game(initial_numbers)
print(f"Numărul de rotații: {rotations}")
print(f"Numărul de elemente nenule rămase: {non_zero_count}")