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