Problemi 008
Kërkesa
Një olimpiadë programimi zhvillohet në disa faza. Nga faza e parë në
të dytën kualifikohen K
pjesëmarrësit që kanë marrë më shumë
pikë. Por nqs janë disa pjesëmarrës që kanë numër të njëjtë pikësh me
atë që është në vendin e K-të, edhe ata kualifikohen.
Bëni një program që merr numrin K dhe pikët e pjesëmarrësve, dhe nxjerr numrin e pjesëmarrësve që kualifikohen për në fazën tjetër.
Referenca: https://www.codechef.com/problems/QUALPREL
Shembull
$ cat input.txt
2
5 1
3 5 2 4 5
6 4
6 5 4 3 2 1
$ python3 prog.py < input.txt
2
4
Zgjidhja
T = int(input())
for t in range(T):
n, k = map(int, input().split())
piket = list(map(int, input().split()))
piket.sort(reverse=True)
while k < n and piket[k] == piket[k-1]:
k += 1
print(k)
https://tinyurl.com/101-prog-008
Sqarime
Së pari, pikët e konkurentëve duhen renditur në rendin zbritës
(piket.sort(reverse=True)
). Pastaj, k
studentët e parë do
kualifikohen pa diskutim, por gjithashtu edhe studentët pasardhës,
nëse kanë të njëjtin numër pikësh me atë që është në vendin k
.
Kushti k < n
siguron që k
-ja nuk do ta kapërcejë fundin e listës
piket
. Gjithashtu, gjuha Python (si shumë gjuhë të tjera) bën një
vlerësim të shkurtuar të shprehjeve llogjike, që do të thotë se nëse
kushti A
i shprehjes A and B
del False
, atere nuk kalohet fare
te vlerësimi i shprehjes B
.
Në rastin tonë, nëse shprehja piket[k] == piket[k-1]
do të vlerësohej
kur k==n
, do të nxirrte një gabim (sepse piket[n]
ndodhet jashtë
kufirit të listës). Por falë vlerësimit të shkurtuar kjo nuk ndodh.
Detyra
Një olimpiadë programimi është zhvilluar në një qytet në vitet 2010
,
2015
, 2016
, 2017
, 2019
. Bëni një program që merr disa vite dhe
për secilin prej tyre nxjerr HOSTED
nëse olimpiada është zhvilluar
atë vit në qytet, ose NOT HOSTED
nëse nuk është zhvilluar.
Referenca: https://www.codechef.com/problems/SNCKYEAR
Shembull
$ cat input.txt
2
2019
2018
$ python3 prog.py < input.txt
HOSTED
NOT HOSTED