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
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
Fișierul de intrare coronite.in conține :
- Pe prima linie numărul
Nde elevi. - Pe a doua linie,
Nvalorix1,x2, … ,xNnumere 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
Fișierul de ieșire coronite.out va conține:
- Pe prima linie se va scrie numărul
1dacă premierea a fost validă sau0în caz contrar -Pe a doua linie o valoareNRreprezentând a câta coroniță i-a fost acordată elevului cu numărul de concurs1. Dacă elevul1nu a fost premiat valoarea luiNRva fi0.
Restricții și precizări
1 ≤ N ≤ 1001 ≤ 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
coronite.in
6 3 1 9 4 1 2
coronite.out
1 5
Explicație
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
coronite.in
4 1 3 4 1
coronite.out
0 2
Explicație
Se pun coronițe elevilor: 2, 1. Elevul 1 primește a 2-a coroniță.
Încărcare soluție
Lipește codul aici
<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>