Kódováním v Pythonu


Dobry den,
Chtela bych se zeptat, zda by mi nekdo nepomohl s python kodem.
Jde o 2 přednášky - volitelné V a povinné P. Povinné jsou na mezi 2 budovami I a M. Pred, mezi a za povinnými přednáškami jsou volitelné. Úkolem je ziskat co nejvíce volitelných přednášek kolik je mozne.
Pokud jsou volitelné před prvni povinnou a za posledni povinnou, vsechny se započítání do maxV. Pokud jsou přednášky mezi dvema povinnymi, na stejných budovách, vsechny volitelné přednášky se započítaji do maxV. Pokud jsou volitelné mezi 2 povinnymi, mezi rozdílnými budovami, musim započítat přesun mezi budovami 40 min- nektere přednášky se nestihnou.
Pres tento vstup ma vyjít 191 možných volitelných přednášek. Mně na outputu vychází 189. Mohl by mi nekdo prosim poradit?


with open("int", "r") as fp: # nacteni do 2D pole
l = fp.readline().strip().split() # strip - odstranění bílých znaků
# split - rozdělení řádku na slova, mění řetězec na list
nP = int(l[0])
nV = int(l[1])
P = [None] * nP
V = [None] * nV
for i in range(0, nP):
a = fp.readline().strip().split()
P[i] = [int(a[0]), int(a[1]), a[2]]
for i in range(0, nV):
a = fp.readline().strip().split()
V[i] = [int(a[0]), int(a[1])]
maxV = []
#V pred prvni povinnou
for m in range(0, nV):
if V[m][0] < P[0][0]:
maxV.append(m)


misto = P[0][2]
x = P[0][1]
#V mezi povinnymi, stejne budovy
for i in range(0, nP):
for m in range(0, nV):
if x < V[m][0] and V[m][1] < P[i][0] and misto == P[i][2]:
maxV.append(m)
x = P[i][1]
misto = P[i][2]

pocatek = V[0][1] # Inicializace počátečního času
# V mezi povinnymi, rozdílné budovy
for i in range(0, nP):
for m in range(0, nV):
if x < V[m][0] and V[m][1] + 40 <= P[i][0] and misto != P[i][2]:
maxV.append(m)
x = P[i][1]
misto = P[i][2]

for s in range(0, nV):
if misto != P[i][2]:
if pocatek + 40 <= V[s][0]: # Pokud je volný čas 40 minut mezi dvěma přednáškami
maxV.append(s)
pocatek = V[s][1] # Aktualizace počátečního času pro další iteraci

#V po posledni povinné
for m in range(0, nV):
if V[m][0] > P[nP-1][1]:
maxV.append(m)
maxV.sort()
print(len(maxV))


for index in maxV:
print("Time:", V[index][0], "-", V[index][1])







Vstup:
20 200
33 51 M
225 242 M
616 634 M
793 809 M
1017 1035 I
1463 1480 I
1546 1563 M
1698 1717 M
1851 1868 M
2002 2021 I
3022 3042 M
3098 3117 I
3157 3177 M
3344 3363 M
3933 3951 M
4182 4202 M
4580 4600 I
6200 6216 M
6679 6695 M
7012 7032 I
0 17
61 78
91 107
136 153
161 178
203 220
252 271
293 308
332 352
378 395
408 425
451 470
486 503
512 531
546 562
585 601
648 664
682 697
715 733
737 752
759 775
816 835
854 870
886 901
910 928
951 969
983 1000
1048 1066
1078 1094
1110 1127
1143 1163
1185 1203
1205 1220
1236 1252
1279 1296
1325 1342
1360 1375
1403 1418
1440 1455
1488 1503
1509 1529
1578 1595
1623 1643
1647 1664
1674 1693
1722 1737
1767 1782
1801 1816
1827 1842
1887 1906
1935 1955
1960 1976
2030 2050
2055 2075
2081 2099
2111 2130
2150 2169
2199 2216
2230 2250
2266 2285
2307 2323
2336 2354
2380 2396
2409 2426
2433 2452
2474 2492
2506 2526
2552 2572
2590 2605
2619 2639
2659 2676
2695 2713
2735 2750
2760 2780
2787 2803
2805 2821
2842 2857
2870 2885
2888 2905
2928 2944
2960 2980
2987 3007
3057 3074
3118 3138
3204 3223
3250 3267
3272 3288
3313 3331
3371 3388
3389 3404
3409 3426
3427 3447
3459 3477
3487 3505
3517 3534
3547 3566
3569 3589
3602 3622
3626 3644
3660 3676
3701 3717
3747 3764
3769 3788
3802 3820
3843 3863
3884 3900
3910 3930
3956 3975
3977 3997
4016 4036
4063 4081
4095 4110
4113 4128
4137 4157
4223 4241
4259 4274
4285 4303
4308 4325
4352 4367
4385 4404
4425 4440
4447 4466
4471 4491
4499 4514
4539 4558
4605 4621
4647 4663
4686 4702
4728 4744
4755 4770
4774 4794
4801 4819
4842 4858
4884 4903
4925 4945
4947 4967
4982 4999
5019 5039
5056 5076
5093 5113
5143 5160
5174 5194
5204 5221
5244 5262
5264 5282
5283 5302
5332 5347
5355 5372
5378 5397
5411 5428
5447 5462
5471 5491
5515 5530
5541 5561
5585 5605
5619 5636
5643 5662
5666 5681
5708 5724
5734 5749
5759 5775
5778 5796
5805 5824
5853 5872
5891 5909
5939 5954
5982 5997
6026 6044
6072 6087
6094 6111
6120 6140
6153 6168
6174 6193
6230 6250
6264 6281
6286 6304
6312 6330
6354 6374
6393 6413
6422 6438
6444 6463
6478 6497
6507 6523
6549 6568
6596 6614
6615 6633
6643 6659
6696 6715
6739 6756
6759 6777
6780 6796
6826 6844
6862 6877
6885 6900
6930 6947
6970 6989
7051 7068
7097 7116
7141 7157
7167 7186

1 відповідей
with open("input.txt", "r") as fp:
l = fp.readline().strip().split()
nP = int(l[0])
nV = int(l[1])
P = [None] * nP
V = [None] * nV

for i in range(nP):
a = fp.readline().strip().split()
P[i] = [int(a[0]), int(a[1]), a[2]]

for i in range(nV):
a = fp.readline().strip().split()
V[i] = [int(a[0]), int(a[1])]

maxV = []
previous_end_time = 0
previous_location = None

for m in range(nV):
if V[m][0] < P[0][0]:
maxV.append(m)

for i in range(nP):
if i > 0:
travel_time = 40 if P[i-1][2] != P[i][2] else 0
for m in range(nV):
if previous_end_time < V[m][0] and V[m][1] + travel_time <= P[i][0]:
maxV.append(m)
previous_end_time = P[i][1]
previous_location = P[i][2]

for m in range(nV):
if V[m][0] > P[-1][1]:
maxV.append(m)

maxV = list(set(maxV))
maxV.sort()

print(len(maxV))
for index in maxV:
print("Time:", V[index][0], "-", V[index][1])
Коментарі:
Mm M.
Pěkný večer, moc děkuji. Jen prosím, vychází Vám výsledek 191? Mně to stále nevychází. Děkuji
Mm M.
popřípadě, dá se narychlo s Vámi zkontaktovat? děkuji