1483 - Coronite
În vederea premierii la un concurs de informatică N
candidați sunt rugați să se așeze pe un cerc. Elevii sunt identificați în ordine prin numerele de la 1
la N
. Comisia pleacă din dreptul primului elev, face x1
pași pe cerc și pune coronița elevului respectiv. Mai departe, comisia merge în continuare pe cerc x2
pași și pune o a doua coroniță elevului curent. Daca elevul curent are deja o coroniță atunci se numără și acea poziție și trece mai departe. După N
astfel de acțiuni premierea se încheie. Premierea se consideră a fi validă dacă toți candidații au primit câte o coroniță.
Cerința[edit | edit source]
Aflați dacă premierea a fost validă și de asemenea, aflați a câta coroniță a fost pusă elevului cu numărul 1
.
Date de intrare[edit | edit source]
Fișierul de intrare coronite.in
conține :
- Pe prima linie numărul
N
de elevi. - Pe a doua linie,
N
valorix1
,x2
, … ,xN
numere naturale nenule, reprezentând, în ordine, numărul de pași pe cerc pe care îl efectuează comisia pentru premierea următorului elev.
Date de ieșire[edit | edit source]
Fișierul de ieșire coronite.out
va conține:
- Pe prima linie se va scrie numărul
1
dacă premierea a fost validă sau0
în caz contrar -Pe a doua linie o valoareNR
reprezentând a câta coroniță i-a fost acordată elevului cu numărul de concurs1
. Dacă elevul1
nu a fost premiat valoarea luiNR
va fi0
.
Restricții și precizări[edit | edit source]
1 ≤ N ≤ 100
1 ≤ xi ≤ 2*N
- Dacă primul copil primește mai multe coronițe, se va afișa numărul de ordine al primei coronițe primite de el.
Exemplul 1[edit | edit source]
coronite.in
6 3 1 9 4 1 2
coronite.out
1 5
Explicație[edit | edit source]
Se pun coronite, in ordine, elevilor: 4
, 5
, 2
, 6
, 1
, 3
. Toți elevii au coronițe. Elevului 1
i se pune a 5
-a coroniță.
Exemplul 2[edit | edit source]
coronite.in
4 1 3 4 1
coronite.out
0 2
Explicație[edit | edit source]
Se pun coronițe elevilor: 2
, 1
. Elevul 1
primește a 2
-a coroniță.
Încărcare soluție[edit | edit source]
Lipește codul aici[edit | edit source]
<syntaxhighlight lang="python"> with open("coronite.in", "r") as fin, open("coronite.out", "w") as fout:
x = [0] * 101 sel = [0] * 101 n = 0
def main():
n = int(fin.readline()) for i in range(1, n+1): x[i] = int(fin.readline())
for i in range(1, n+1): for j in range(1, x[i]+1): poz += 1 if poz > n: poz = 1 if poz == 1 and sel[1] == 0: nr = i sel[poz] = 1
ok = 1 for i in range(1, n+1): if sel[i] == 0: ok = 0
if ok: fout.write("1\n") else: fout.write("0\n") fout.write(str(nr) + "\n")
if __name__ == '__main__':
main()
</syntaxhighlight>