1946 - Zece

From Bitnami MediaWiki
Revision as of 14:19, 14 December 2023 by Raul (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Pentru cei elevi din clasa a VI-a competiția este foarte importantă și, pentru a se pregăti suplimentar, aceștia lucrează de pe site-ul www.PROBLEMEINFORMATICA.RO.

Pentru a-i încuraja, profesoara de informatică le promite câte o notă de 10 primilor k elevi, cei mai harnici și sârguincioși.

Dacă observă că mai sunt elevi care au același număr de probleme rezolvate ca și cel de pe poziția k, atunci profesoara, echidistantă, mai pune în plus note de 10 la toți aceștia.

Cerința[edit | edit source]

Să se scrie un program care, citind numărul N de elevi ai clasei, numărul k de elevi notați cu 10 și N valori reprezentând numărul de probleme rezolvate de fiecare elev, rezolvă cerințele:

1. Afișează în ordine descrescătoare numărul de probleme lucrate de elevii care vor primi nota 10.

2. Afișează în ordinea descrescătoare a numărului de probleme rezolvate, numerele de ordine ale tuturor elevilor care primesc nota 10.

Date de intrare[edit | edit source]

Fișierul de intrare zece.in conține pe prima linie un număr natural C (C poate avea doar valoarea 1 sau valoarea 2). A doua linie conține, în această ordine, separate printr-un un spațiu, numerele N și k. A treia linie conține, în ordine numărul de probleme rezolvate de cei N copii, numerotați de la 1 la N, exprimate prin numere naturale, despărțite prin câte un spațiu.

Date de ieșire[edit | edit source]

Dacă valoarea lui C este 1, se va rezolva numai cerința 1). În acest caz, fişierul de ieșire zece.out va conține pe prima linie minim k numere naturale reprezentând numărul de probleme rezolvate de elevii care primesc nota 10, în ordinea descrescătoare a acestora (valorile vor fi separate de câte un spațiu).

Dacă valoarea lui C este 2, se va rezolva numai cerința 2). În acest caz, fişierul de ieșire zece.out va conține pe prima linie minim k numere naturale reprezentând numerele de ordine ale elevilor în ordinea descrescătoare a numărului de probleme rezolvate de aceștia. Dacă sunt elevi care au același număr de probleme rezolvate se vor afișa elevii în ordinea crescătoare a poziției lor (valorile vor fi separate de câte un spațiu).

Restricții și precizări[edit | edit source]

  • 1 ≤ N ≤ 1000
  • 1 ≤ k ≤ N
  • cele N numere citite vor fi mai mici decât 1.000.000

Exemplul 1[edit | edit source]

zece.in

1
5 3
18 45 55 60 45

zece.out

60 55 45 45


Încărcare soluție[edit | edit source]

Lipește codul aici[edit | edit source]

<syntaxhighlight lang="python" line="1"> ​def main():

   p, i, k, n = 0, 0, 0, 0
   a = [0] * 10001
   z, j, aux = 0, 0, 0
   b = [0] * 10001
   p, n, k = map(int, input().split())
   for i in range(1, n + 1):
       a[i] = int(input())
       b[i] = i
   for j in range(1, n):
       for z in range(j + 1, n + 1):
           if a[z] > a[j]:
               aux = a[z]
               a[z] = a[j]
               a[j] = aux
               aux = b[z]
               b[z] = b[j]
               b[j] = aux
           elif a[z] == a[j] and b[j] > b[z]:
               aux = b[z]
               b[z] = b[j]
               b[j] = aux
   if p == 1:
       for i in range(1, k + 1):
           print(a[i], end=" ")
       while a[i] == a[k]:
           print(a[i], end=" ")
           i += 1
   else:
       for i in range(1, k + 1):
           print(b[i], end=" ")
       while a[i] == a[k]:
           print(b[i], end=" ")
           i += 1

</syntaxhighlight>