1946 - Zece
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
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
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
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
1 ≤ N ≤ 1000
1 ≤ k ≤ N
- cele
N
numere citite vor fi mai mici decât1.000.000
Exemplul 1
zece.in
1 5 3 18 45 55 60 45
zece.out
60 55 45 45
Încărcare soluție
Lipește codul aici
<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>