Problemi 077

Kërkesa

Në një varg që përbëhet nga shifrat 0 dhe 1 kontrolloni nëse të gjitha shifrat 1 formojnë një segment të vetëm dhe jo-bosh.

Referenca: https://www.codechef.com/problems/SEGM01

Shembull

$ cat input.txt
6
001111110
00110011
000
1111
101010101
101111111111

$ python3 prog.py < input.txt
YES
NO
NO
YES
NO
NO

Zgjidhja 1

for _ in range(int(input())):
    s = input()
    i = 0
    j = len(s) - 1
    while i < j:
        if s[i] == '1' and s[j] == '1':
            break
        if s[i] == '0':
            i += 1
        if s[j] == '0':
            j -= 1
    if i > j:
        print('NO')
    else:
        while i < j:
            if s[i] == '0':
                break
            i += 1
        if i == j and s[i] == '1':
            print('YES')
        else:
            print('NO')

Sqarime

Marrim dy indekse i dhe j, njëri që niset nga fillimi dhe tjetri nga fundi, dhe i lëvizim deri sa të gjejmë fillimin dhe fundin e njëshave. Pastaj kontrollojmë nëse midis këtyre ka ndonjë zero.

Zgjidhja 2

for _ in range(int(input())):
    s = input()
    nr1 = s.count('1')
    if nr1 == 0:
        print('NO')
    else:
        i = 0
        while s[i] != '1':
            i += 1
        j = len(s) - 1
        while s[j] != '1':
            j -= 1
        if j - i + 1 == nr1:
            print('YES')
        else:
            print('NO')

Sqarime

Fillimisht gjejmë numrin e njëshave. Pastaj indeksin e njëshit të parë nga fillimi, dhe të njëshit të parë nga fundi. Pastaj kontrollojmë nëse largësia midis këtyre dy indekseve është e barabartë me numrin e njëshave.

Detyra

Në një kompani janë N punonjës, pagat e të cilëve janë \(W_i\) (për i nga 1N). Një ditë pronari vendosi që tua bëjë rrogat të barabarta të gjithëve. Por për të arritur këtë qëllim ai përdor një veprim të tillë: Zgjedh një punonjës, dhe rrit me 1 rrogën e gjithë punonjësve të tjerë (por jo të këtij që ka zgjedhur). Sigurisht që punonjësi i zgjedhur mund të jetë i ndryshëm për secilin veprim. Sa është numri më i vogël i veprimeve të tilla që duhen kryer deri sa të gjithë punonjësit të kenë rroga të barabarta?

Referenca: https://www.codechef.com/problems/SALARY

Shembull

$ cat input.txt
2
3
1 2 3
2
42 42

$ python3 prog.py < input.txt
3
0

Në rastin e parë, fillimisht zgjidhet punonjësi i tretë, dhe pagat bëhen (2, 3, 3). Pastaj mund të zgjidhet punonjësi i dytë, dhe pagat bëhen (3, 3, 4). Pastaj mund të zgjidhet punonjësi i tretë, dhe pagat bëhen (4, 4, 4). Pra duhen 3 veprime për ti barazuar.

Në rastin e dytë janë tashmë të barabarta, kështu që nuk është nevoja për asnjë veprim.