1483 - Coronite

From Bitnami 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[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 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[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ă 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[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>