Problemi 046

Kërkesa

Një listë quhet “listë ylber” nëse plotëson këto kushte:

  • \(a_1\) elementët e parë janë 1
  • \(a_2\) elementët e tjerë janë 2
  • \(a_3\) elementët e tjerë janë 3
  • \(a_4\) elementët e tjerë janë 4
  • \(a_5\) elementët e tjerë janë 5
  • \(a_6\) elementët e tjerë janë 6
  • \(a_7\) elementët e tjerë janë 7
  • \(a_6\) elementët e tjerë janë 6
  • \(a_5\) elementët e tjerë janë 5
  • \(a_4\) elementët e tjerë janë 4
  • \(a_3\) elementët e tjerë janë 3
  • \(a_2\) elementët e tjerë janë 2
  • \(a_1\) elementët e fundit janë 1
  • ku \(a_i\) është një numër natyror (jo-zero) i çfarëdoshëm
  • dhe nuk ka elementë të tjerë në listë përveç këtyre

Bëni një program që gjen nëse një listë numrash është listë ylber.

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

Shembull

$ cat input.txt
3
19
1 2 3 4 4 5 6 6 6 7 6 6 6 5 4 4 3 2 1
14
1 2 3 4 5 6 7 6 5 4 3 2 1 1
13
1 2 3 4 5 6 8 6 5 4 3 2 1

$ python3 prog.py < input.txt
yes
no
no

Rasti i parë i plotëson të gjitha kushtet.

Rasti i dytë ka vetëm një njësh në fillim dhe dy njësha në fund.

Rasti i tretë nuk ka asnjë element 7 dhe ka elemente tepër (8).

Zgjidhja

for _ in range(int(input())):
    n = int(input())
    L = list(map(int, input().split()))
    i = 0
    j = n-1
    for a in range(1,8):
        if L[i] != a:
            print('no')
            break
        while L[i] == a and L[j] == a and i < j:
            i += 1
            j -= 1
    else:
        if i < j:
            print('no')
        else:
            print('yes')

Sqarime

Meqenëse elementët e listës duhet të jenë simetrikë në lidhje me qendrën, përdorim dy treguesa i dhe j, të cilët nisen prej fillimit dhe fundit dhe vazhdojnë të ecin deri sa të takohen. Gjithashtu kontrollojmë nëse elementët e listës marrin me radhë vlerat nga 1 deri në 7. Mënyra se si e kemi ndërtuar zgjidhjen siguron që asnjë nga këto vlera të mos mungojë, dhe gjithashtu të mos ketë vlera të tjera përveç këtyre.

Detyra

Alisa dhe Beni po bëjnë një lojë me numra. Fillimisht Alisa ka një numër A kurse Beni një numër B. Loja ka gjithsej N hapa dhe Alisa me Benin luajnë me radhë. Kur është radha e tij, secili lojtar e shumëzon numrin e tij me dy. E para luan Alisa.

Bëni një program i cili merr numrat A, B dhe N dhe gjen sa është herësi i pjesëtimit të numrave në fund të lojës (duke pjesëtuar më të madhin me më të voglin).

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

Shembull

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

$ python3 prog.py < input.txt
1
3
2

Në rastin e parë, numrat fillestarë janë (A=1, B=2) dhe loja ka vetëm 1 hap. Në këtë hap Alisa e shumëzon numrin e saj me 2, kështu që në fund të lojës kemi (A=2, B=2) dhe herësi është 1.

Në rastin e dytë kemi (A=3, B=2) dhe N=3. Pasi luan Alisa, Beni, Alisa, kemi (A=12, B=4), kështu që herësi është 3.

Në rastin e tretë kemi (A=3, B=7) dhe N=2. Pasi luan Alisa dhe Beni, kemi (A=6, B=14), kështu që herësi është 2.