1147 - Oni Gim

De la Universitas MediaWiki

La ONIGIM2013 participă N elevi de clasa a V-a având ca id-uri, în ordine, numerele naturale de la 1 la N. Anul acesta organizatorii au afişat la clasa a V-a toate punctajele distincte obţinute de elevi, în ordine strict crescătoare p1, p2,…, pK, şi un şir de N valori a1, a2,…, aN, unde ai reprezintă numărul de elevi care au punctaje strict mai mici decât punctajul elevului având id-ul i (1≤i≤N).

Cerință

Cunoscând numărul de elevi (N), numărul de punctaje distincte (K) obţinute de elevii de clasa a V-a, punctajele p1, p2,…, pK, în ordine strict crescătoare, şi valorile a1, a2,…, aN cu semnificaţia din enunţ, să se scrie un program care determină:

a) Punctajul obţinut de fiecare elev în ordinea crescătoare a id-urilor.

b) Numărul de distincţii acordate de organizatori. Numărul de distincţii este egal cu numărul de elevi care au obţinut cele mai mari trei punctaje distincte.

c) Numărul maxim de elevi care au obţinut acelaşi punctaj.

Date de intrare

Fișierul de intrare onigim.in conține pe prima linie numerele naturale N şi K reprezentând numărul de elevi, respectiv numărul de punctaje distincte obţinute de elevi. Pe a doua linie sunt K numere naturale în ordine strict crescătoare p1, p2,…, pK reprezentând punctajele distincte obţinute de elevi, şi pe a treia linie sunt N numere naturale a1, a2,…, aN, unde ai reprezintă numărul de elevi care au punctaje strict mai mici decât punctajul elevului cu id-ul i.

Date de ieșire

Fișierul de ieșire onigim.out va conține trei linii. Pe prima linie se află N numere naturale v1, v2,…, vN reprezentând punctajele obţinute de cei N concurenţi (vi- punctajul concurentului cu id-ul i), pe a doua linie se află un număr natural D reprezentând numărul de distincţii acordate de organizatori, pe a treia linie se află un număr natural M reprezentând numărul maxim de elevi care au obţinut acelaşi punctaj.

Restricții și precizări

  • 1 ≤ N ≤ 1000;
  • 1 ≤ pi ≤ 300, (1≤i≤N);
  • 0 ≤ ai < 1000, (1≤i≤N);
  • 1 ≤ K ≤ 1000;

Exemplu:

onigim.in

6 4
100 150 175 200
4 2 0 0 3 4 

onigim.out

200 150 100 100 175 200
4
2

Explicație

Sunt 4 elevi care au punctajul mai mic decât punctajul elevului cu id-ul 1, 2 elevi cu punctajul mai mic decât punctajul elevului cu id-ul 2, etc.

Cele mai mari 3 punctaje sunt obţinute de 4 elevi. Numărul maxim de elevi care au acelaşi punctaj este 2.

Încărcare soluție

Lipește codul aici

import sys

sys.stdin = open("onigim.intxt", "r")
sys.stdout = open("onigim.outtxt", "w")

n, k = map(int, input().split())
p = list(map(int, input().split()))
v = [0] * 1001
a = [0] * 1001
fr = [0] * 1001
nrdistinctii = 0
nr = 0

for i in range(1, k + 1):
    p[i] = int(input())

for i in range(1, n + 1):
    a[i] = int(input())
    fr[a[i]] += 1

i = 1
for j in range(n + 1):
    if fr[j] != 0:
        v[j] = p[i]
        i += 1

for i in range(1, n + 1):
    a[i] = v[a[i]]

for i in range(1, n + 1):
    print(a[i], end=' ')
print()

i = n
while i >= 0:
    if fr[i] != 0 and nr < 3:
        nrdistinctii += fr[i]
        nr += 1
    i -= 1

print(nrdistinctii)

nr = 0
for i in range(n):
    if nr < fr[i]:
        nr = fr[i]

print(nr)