40. ročník (2024/2025)
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|
4 | 5 | 4 | 8 | 8 | 2 | 7 | 2 |
A = [int(_) for _ in input().split()]
A
[4, 5, 4, 8, 8, 2, 7, 2]
navstivene = [ False for i in range(len(A)+1)]
navstivene
[False, False, False, False, False, False, False, False, False]
navstivene = [False]*(len(A)+1)
navstivene
[False, False, False, False, False, False, False, False, False]
aktualna_kancelaria = 0
while True:
if navstivene[aktualna_kancelaria]:
print(f'Opakuje sa kancelaria {aktualna_kancelaria+1}')
break
navstivene[aktualna_kancelaria] = True
aktualna_kancelaria = A[aktualna_kancelaria]-1
Opakuje sa kancelaria 8
Prvým prechodom nájdeme opakujúcu sa kanceláriu, druhým nájdeme všetkz kancelrácie v kružnici - označíme (napr. v poli je_v_cykle
)
A skúšame postupne všetky začiatky (navstivene vynulujeme) ..
$O(n^2)$
2000000**2/10**9/3600
1.1111111111111112
viac ako 1 hodina výpočtu ...