
Вопрос задан 06.03.2021 в 07:50.
Предмет Информатика.
Спрашивает Заяц Диана.
В салоне автобуса "Дедалус" 20 рядов по 6 мест в каждом. В каждом ряду места нумеруются
слева-направо. Так в первом ряду места 1, 2 и 3 находятся слева, а места 4, 5 и 6 - справа. Места 1 и 6 находятся у окон, места 2 и 5 - средние, а места 3 и 4 - у прохода. Когда пассажир входит в автобус, то он выбирает себе место по следующему принципу: сначала он выбирает ряд с наименьшим номером, на котором есть свободные места. Если свободные места в этом ряду есть и слева и справа, то он выбирает левую половину, а если вся левая половина занята - правую. Если свободных мест на половине ряда несколько, то пассажир выбирает место, наиболее близкое к окну. Если пассажир сел на какое-то место, то он сидит на нём до конца поездки. Автобус едет по маршруту, остановки на котором занумернованы от 1 до M, останавливаясь на каждой. На остановках автобус ждут N пассажиров, причём на каждой остановке автобус ждёт не более одного пассажира. Для каждого пассажира известна остановка, на которой он ждёт автобус и остановка, на которую он хочет попасть. Если на одной и той же остановке пассажиры выходят и заходят, то сначала выходящие пассажиры освобождают места и входящий пассажир может занять их место. Определите для каждого из пассажиров номер места, которое он займет. Гарантируется, что всем пассажирам хватит места.

Ответы на вопрос

Отвечает Варежкин Антон.
Привет, у меня почти получилось, надо доработать, а так все делается как надо, только нужно условие на места доработать
const Sz = 1000; var a: array [1..Sz] of integer; a1: array [1..Sz] of integer; a2: array [1..Sz] of integer; a3: array [1..Sz] of integer; M: integer; N: integer; i: integer; k: integer;begin read(M); readln(N); for k:=1 to N do begin read(a[i]); readln(a1[i]); if (a[i]<>0) then a3[i]:=1 else a3[i]:=0; end; for k:=1 to N do begin if(a3[i]<>0) then begin for i:=1 to i do begin if(a3[k]=0) then d[i]:=1; if (a2[k]=i) then d[k]:=0; end; writeln(a3[i]) end;end;end.
const Sz = 1000; var a: array [1..Sz] of integer; a1: array [1..Sz] of integer; a2: array [1..Sz] of integer; a3: array [1..Sz] of integer; M: integer; N: integer; i: integer; k: integer;begin read(M); readln(N); for k:=1 to N do begin read(a[i]); readln(a1[i]); if (a[i]<>0) then a3[i]:=1 else a3[i]:=0; end; for k:=1 to N do begin if(a3[i]<>0) then begin for i:=1 to i do begin if(a3[k]=0) then d[i]:=1; if (a2[k]=i) then d[k]:=0; end; writeln(a3[i]) end;end;end.



Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.
Для решения данной задачи, необходимо последовательно обработать каждую остановку и определить место, которое займет каждый пассажир.
Инициализируем автобус как двумерный массив размером 20x6, где каждый элемент будет представлять место в автобусе. В начале все места считаются свободными.
Перебираем каждую остановку:
- Если на остановке ждет пассажир, обозначим его остановку как start_stop и остановку, на которую он хочет попасть, как end_stop.
- Для поиска подходящего места пассажира, ищем наименьший номер ряда с доступными местами.
- Если в ряду есть свободные места и слева, и справа, выбираем левую половину ряда.
- Если левая половина занята, выбираем правую половину.
- Если в половине ряда есть несколько свободных мест, выбираем место, наиболее близкое к окну.
- Помечаем выбранное место как занятое.
- Записываем номер места для текущего пассажира.
Возвращаем список номеров мест для каждого пассажира.
Ниже представлен код на языке Python, реализующий данную логику:
pythondef assign_seats(passengers, stops):
bus = [[False] * 6 for _ in range(20)]
seat_numbers = []
for i in range(len(stops)):
start_stop, end_stop = stops[i]
row = 0
while row < 20 and (bus[row][0] or bus[row][5]):
row += 1
if row < 20:
if not bus[row][0]:
seat = 0
elif not bus[row][5]:
seat = 5
else:
left_half = [1, 2]
right_half = [4, 3]
if all(bus[row][x] for x in left_half):
seat = min(right_half, key=lambda x: abs(5 - x))
else:
seat = min(left_half, key=lambda x: abs(0 - x))
bus[row][seat] = True
seat_numbers.append(row * 6 + seat + 1)
else:
seat_numbers.append(-1) # No available seats
return seat_numbers
Вызов функции assign_seats
принимает два аргумента: passengers
(список пассажиров) и stops
(список пар остановок для каждого пассажира).
Пример использования:
pythonpassengers = ['A', 'B', 'C', 'D']
stops = [(1, 2), (2, 4), (4, 1), (1, 2)]
seat_numbers = assign_seats(passengers, stops)
print(seat_numbers)


Топ вопросов за вчера в категории Информатика

Информатика 558

Информатика 33

Информатика 74

Информатика 12

Информатика 10

Информатика 33

Информатика 27
Последние заданные вопросы в категории Информатика
Предметы
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili