Problemi 029
Kërkesa
Në fund të ditës, para se kuzhina e restorantit të mbyllet, është një listë me n punë (nga 1 në n) që duhen bërë. Kuzhinierët kanë bërë disa prej tyre dhe janë larguar, dhe tani ka mbetur vetëm shefi dhe ndihmësi i tij. Ata i marrin punët e mbetura me radhë: të parën shefi, të dytën ndihmësi, të tretën shefi, e kështu me radhë (një po një jo).
Bëni një program që nxjerr punët që bën shefi dhe ato që bën ndihmësi, kur jepet numri n i punëve, numri m i punëve që janë bërë deri tani, dhe numrat e punëve që janë bërë deri tani.
Referenca: https://www.codechef.com/problems/CLEANUP
Shembull
$ cat input.txt
3
6 3
2 4 1
3 2
3 2
8 2
3 8
$ python3 prog.py < input.txt
3 6
5
1
1 4 6
2 5 7
Në rastin e parë janë
6
punë dhe janë bërë punët2 4 1
. Kanë mbetur pa bërë punët3 5 6
, kështu që shefi bën punët3 6
kurse ndihmësi bën punën5
.Në rastin e dytë janë
3
punë dhe janë bërë punët3 2
. Ka mbetur pa bërë vetëm puna1
, kështu që këtë e bën shefi kurse ndihmësi nuk bën asgjë (rreshti bosh).Në rastin e tretë janë
8
punë dhe janë bërë punët3 8
. Kanë mbetur pa bërë punët1 2 4 5 6 7
, kështu që shefi bën punët1 4 6
, kurse ndihmësi bën punët2 5 7
.
Zgjidhja 1
def print_punet(punet):
if len(punet) == 0:
print()
else:
for p in punet[:-1]:
print(p, end=' ')
print(punet[-1])
for _ in range(int(input())):
n, m = map(int, input().split())
punet = [1] + [0]*n # liste me 1 njesh dhe n zero
punet_e_bera = list(map(int, input().split()))
for p in punet_e_bera:
punet[p] = 1
punet1 = [] # punet e shefit
punet2 = [] # punet e ndihmesit
radha = 'shefi'
for p in range(1, n+1):
if punet[p] == 0:
if radha == 'shefi':
punet1 += [p]
radha = 'ndihmesi'
else:
punet2 += [p]
radha = 'shefi'
print_punet(punet1)
print_punet(punet2)
Sqarime
Mbajmë një listë me të gjitha punët, ku punët e pabëra shënohen me 0, punët e bëra me 1, kurse indeksi në listë është numri i punës. Pastaj punët e pabëra i ndajmë në dy lista të tjera.
Zgjidhja 2
for _ in range(int(input())):
n, m = map(int, input().split())
punet = [] # te gjitha punet
for i in range(n):
punet += [i+1]
punet_e_bera = list(map(int, input().split()))
for p in punet_e_bera:
punet[p-1] = -1
punet1 = [] # punet e shefit
punet2 = [] # punet e ndihmesit
radha = 'shefi'
for p in punet:
if p != -1:
if radha == 'shefi':
punet1 += [p]
radha = 'ndihmesi'
else:
punet2 += [p]
radha = 'shefi'
print(*punet1)
print(*punet2)
Sqarime
E ngjashme me zgjidhjen e parë, por punët i ruajmë në listë sipas
numrit të tyre, kurse punët e bëra i shënojmë me -1
.
Kur themi print(*list)
, i tregojmë funksionit print()
që të
printojë gjithë elementët e listës, jo vetë listën.
Zgjidhja 3
for _ in range(int(input())):
n, m = map(int, input().split())
punet = [] # te gjitha punet
for i in range(n):
punet += [i+1]
punet_e_bera = list(map(int, input().split()))
for p in punet_e_bera:
punet.remove(p)
punet1 = [] # punet e shefit
punet2 = [] # punet e ndihmesit
radha = 'shefi'
for p in punet:
if radha == 'shefi':
punet1 += [p]
radha = 'ndihmesi'
else:
punet2 += [p]
radha = 'shefi'
print(*punet1)
print(*punet2)
Sqarime
E ngjashme me zgjidhjen e dytë, por punët e bëra, në vend që ti
shënojmë me -1
, i fshijmë fare nga lista (me funksionin
remove()
). Punët që mbeten i ndajmë një andej një këtej.
Zgjidhja 4
for _ in range(int(input())):
n, m = map(int, input().split())
punet = [] # te gjitha punet
for i in range(n): punet += [i+1]
punet_e_bera = list(map(int, input().split()))
for p in punet_e_bera: punet.remove(p)
punet1 = [punet[i] for i in range(len(punet)) if i % 2 == 0]
punet2 = [punet[i] for i in range(len(punet)) if i % 2 == 1]
print(*punet1)
print(*punet2)
Sqarime
E ngjashme me zgjidhjen e tretë, vetëm se kodi për ndarjen e punëve të mbetura është pak më kompakt.
Detyra
Në një rrugë ndodhen 100 shtëpi dhe dyqane, me numra nga 1 në 100. Në M prej tyre banojnë policë të veprimit të shpejtë. Në rast se në ndonjë nga shtëpitë ose dyqanet ndodh ndonjë vjedhje ose incident, pronari mund të shtypë butonin e alarmit dhe policët më të afërt vrapojnë për në vendngjarje. Nëse arrijnë brenda një kohe të caktuar, të quajtur koha kritike, mund ta kapin hajdutin me presh në dorë.
Çdo polic mund të arrijë K shtëpi (ose dyqane) brenda kohës kritike, në të dyja anët e shtëpisë së tij. Nëse te një shtëpi nuk mund të arrijë asnjë polic brenda kohës kritike, thuhet që kjo shtëpi nuk ka mbrojtje të mjaftueshme. Nëse mund të arrijnë disa policë (më shumë se një), thuhet që ka mbrojtje të shumëfishtë.
Na jepet numri K dhe vendbanimi i çdo polici. Bëni një program që gjen sa shtëpi nuk kanë mbrojtje të mjaftueshme dhe sa kanë mbrojtje të shumëfishtë.
Referenca: https://www.codechef.com/problems/COPS
Shembull
$ cat input.txt
3
4 56
12 52 56 8
2 20
21 75
2 40
10 51
$ python3 prog.py < input.txt
0 100
18 0
9 40