Вопрос задан 06.03.2021 в 07:50. Предмет Информатика. Спрашивает Заяц Диана.

В салоне автобуса "Дедалус" 20 рядов по 6 мест в каждом. В каждом ряду места нумеруются

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

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

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Варежкин Антон.
Привет, у меня почти получилось, надо доработать,  а так все делается как надо, только нужно условие на места доработать





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.


0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

Для решения данной задачи, необходимо последовательно обработать каждую остановку и определить место, которое займет каждый пассажир.

  1. Инициализируем автобус как двумерный массив размером 20x6, где каждый элемент будет представлять место в автобусе. В начале все места считаются свободными.

  2. Перебираем каждую остановку:

    • Если на остановке ждет пассажир, обозначим его остановку как start_stop и остановку, на которую он хочет попасть, как end_stop.
    • Для поиска подходящего места пассажира, ищем наименьший номер ряда с доступными местами.
    • Если в ряду есть свободные места и слева, и справа, выбираем левую половину ряда.
    • Если левая половина занята, выбираем правую половину.
    • Если в половине ряда есть несколько свободных мест, выбираем место, наиболее близкое к окну.
    • Помечаем выбранное место как занятое.
    • Записываем номер места для текущего пассажира.
  3. Возвращаем список номеров мест для каждого пассажира.

Ниже представлен код на языке Python, реализующий данную логику:

python
def 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 (список пар остановок для каждого пассажира).

Пример использования:

python
passengers = ['A', 'B', 'C', 'D'] stops = [(1, 2), (2, 4), (4, 1), (1, 2)] seat_numbers = assign_seats(passengers, stops) print(seat_numbers)
0 0

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

Последние заданные вопросы в категории Информатика

Задать вопрос