1483 - Coronite

De la Universitas MediaWiki

Î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 N de elevi.
  • Pe a doua linie, N valori x1, 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

Fișierul de ieșire coronite.out va conține:

  • Pe prima linie se va scrie numărul 1 dacă premierea a fost validă sau 0 în caz contrar -Pe a doua linie o valoare NR reprezentând a câta coroniță i-a fost acordată elevului cu numărul de concurs 1. Dacă elevul 1 nu a fost premiat valoarea lui NR va fi 0.

Restricții și precizări

  • 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

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

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()