Щелчок по информатике - 2023. Программирование. Задание 26. Информатик БУ

preview_player
Показать описание

Еще не подключил бесплатный Щелчок по всем предметам?

Выбирай курс, переходи по ссылке и присоединяйся ❤️
Прямые ссылки на подключение нужного предмета 👇

ЕГЭ

ОГЭ

За мат, КАПС, политоту, флуд, любое упоминание доты и "ауе" в чате - перманентный бан

-----

Наши каналы:
✔️Математика с МО и русский язык с ТА (Основной канал Школково):

0:00 – Вступление
3:00 – Задание №26. Пример 1. Определить, сколько пассажиров сможет сдать свой багаж в течение 24 ч и какой номер будет иметь ячейка, которую займут последней.
4:43 – Суть задания
17:58 – Двумерный список
18:30 – Работа с двумерным списком на python
20:28 – Заполнение списка данными из файла
25:11 – Алгоритм решения
34:14 – Решение на python
1:08:11 – Прогнозы на 26 задание
1:21:28 – Итоги стрима

#егэ #информатика
Рекомендации по теме
Комментарии
Автор

Вроде как более простая реализация, но метод решения +- тот же

s = open("26-39.txt")

k = int(s.readline())
n = int(s.readline())

a = [list(map(int, i.split())) for i in s]
a = sorted(a)

t = []
for i in range(210):
t.append(a[0])
a.pop(0)

count = 210
last = 0

for x in range(len(a)):
for y in range(len(t)):
if a[x][0] > t[y][1]:
t[y] = a[x]
count+=1
last = y+1
print(count)
print(last)

ИванШаныгин
Автор

чесно, я даже не хочу разбираться как сделали вы, у меня сразу появилась идея как это можно решить программно, и я написал прогу минут за 20 на расслабоне
если кому-то интересно, то вот


f = open('forhard26.txt')
bn = int(f.readline())
pn = int(f.readline())

a = [list(map(int, i.split(' '))) for i in f]
a.sort(key = lambda k:(k[0], k[1]))
cb = 1
que = {cb:a[0][1]}
c=1
replaced = False
lastboxfit = 0

for i in range(1, pn):
replaced = False
for bi in que:
if a[i][0]>=(que[bi]+1):
que[bi] = a[i][1]
replaced = True
lastboxfit = bi
c+=1
break
if (not replaced) and ((cb+1)<=bn):
cb+=1
que[cb] = a[i][1]
lastboxfit = cb
c+=1

print(c, lastboxfit)

artick
Автор

Вот еще короче и проще для понимания.
с - список из времен освобождения ячеек
Бежим по пассажирам, для каждого пассажира ищем свободную ячейку,
если нашли (кладем багаж) переписываем время освобождения

f = open('1_26.txt')
k = int(f.readline())
n = int(f.readline())
a = sorted([list(map(int, i.split())) for i in f])
count = 0
c = [0] * k
for p in a:
for e in range(k):
if p[0] > c[e]:
c[e] = p[1]
count += 1
last = e + 1
break
print(count, last)

Слово-юя
Автор

# Че-то у вас всех намудрено в коде)

a = sorted(list(map(lambda n: list(map(int, n.split(' '))), # двумерный список [[начало хранения, конец хранения], ...]

box = [0] * 210 # камера хранения

cou = 0 # кол-во пассажиров

for i in a:
start, end = i
if box[0] == 0:
box[0] = end
cou += 1
else:
for j in range(len(box)):
if box[j] != 0 and start >= box[j] + 1:
box[j] = 0
if 0 in box:
freePlace = box.index(0)
box[freePlace] = end
cou += 1
print(freePlace + 1) # последнее выведенное число - последняя ячейка, в которую положат багаж

print(cou) # кол-во пассажиров, которые смогут сдать свой багаж

zakon
Автор

Если кому надо, решение попроще.

k = 210 # p.s: я удалил 2 первых числа из файла + убрал enter на самой последней строке в файле
file = # вид: [["101 981"], ["679 1159"]] и т.д.

data = list()
for i in range(len(file)):
string = list(map(int, file[i].split(" "))) # вид: [101, 981] [679, 1159] и т.д.
data.append(string)
data = sorted(data)

list_k = [[0, 0] for _ in range(k)] # Наши ячейки. Первое число - время конца хранения, второе число - кол-во хранений.

count = 0
time = 1
last_k = -1
while time != 1440:
for i in range(len(data)):
for j in range(len(list_k)):
if list_k[j][0] == time:
list_k[j][0] = 0

if data[i][0] == time and list_k[j][0] == 0: # Если ячейка пуста, то заносим туда время конца багажа
list_k[j][0] = data[i][1] + 1 # тут + 1 т.к. это время вынимания багажа (не оч разобрался со временем занесения, попробовал по всякому; видимо, его вообще не стоит учитывать)
count += 1
last_k = j + 1 # +1, т.к. ячейки по условию считают с 1, а в коде j начинается с 0
break # обязательно, иначе будет вноситься во все ячейки одинаковое время (которое в данный момент рассматривается)

time += 1

print(count, last_k)

rcommunity
Автор

f = open('26_1__1vn98.txt')
n = f.readline()
a = [list(i.split()) for i in f]
light = [0] * 180
hard = [0] * 20
lost = 0
flag = 0
res_av = 0
for k in range(len(a)):
a[k][0] = int(a[k][0])
a[k][1] = int(a[k][1])
a.sort(key=lambda x:x[0])
for i in range(len(a)):
if a[i][2] == 'A':
flag = 0
for j in range(len(light)):
if light[j] == 0 or a[i][0] > light[j]:
light[j] = a[i][0] + a[i][1]
flag = 1
break
if flag == 0:
for w in range(len(hard)):
if hard[w] == 0 or a[i][0] > hard[w]:
hard[w] = a[i][1] + a[i][0]
flag = 1
break
if flag == 0:
lost += 1
else:
flag = 0
for w in range(len(hard)):
if hard[w] == 0 or a[i][0] > hard[w]:
hard[w] = a[i][1] + a[i][0]
flag = 1
res_av += 1
break
if flag == 0:
lost += 1
print(lost)
print(res_av)
Решение в лоб

DmitryKrygen