Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
1 / 1 / 1
Регистрация: 08.04.2020
Сообщений: 35

Посадка в самолет

20.01.2024, 12:38. Показов 3814. Ответов 2

Студворк — интернет-сервис помощи студентам
В самолётах авиакомпании Битавиа кресла расположены в n рядов, при этом в каждом ряду по шесть мест, между третьим и чевертым местом находится проход. Некотторые пассажиры регисттрируются заранее онлайн, другие пассажиры регистрируются на стойке регистрации в аэропорту.
При онлайн-регистрации пассажир может выбрать любое место и не может его затем менять.
На стойку регистрации придут m пассажиров. По правилам Битавиа нужно рассадить их в самолёте таким образом, чтобы итоговая рассадка в самолёте была симметрична относительно прохода. То есть, если в некотором ряду на первом кресле сидит пассажир, то в том же ряду на шестом кресле тоже должен сидеть пассажир. Тоже самое справедливо для второго и пятого, третьего и четвёртого кресел, соответственно. При этом пересаживать пассажиров, прошедших онлайн-регистрацию нельзя
Вам дана рассадка пассажиров после онлайн-регисрации. Треббуется рассадить m пассажиров так, чтобы иоговая рассадка в самолёте была симметтрична относительно прохода, или определиь, что этто невозможно.
Формат входных данных
В первой строке содержатся два целых числа n и m - количесво рядов в самолёте и количество пассажиров, которые придут на стойку регистрации (1 <= n <= 1000, 0 <= m <= 6000)
В следующих n строках задана изначальная рассажда в самолёте после онлайн-регистрации. В каждой строке содержится по шесть символов, при этом i-й символ j-й строчки равен "X" (заглавная английская X), если i-e место в j-м ряду уже занято и "." (точка) иначе.
Формат выходных данных
Если искомой раскладки не существует, выведите "Impossible".
Иначе выведие n строк по 6 символов - итоговую рассадку в самолёте. При этом i-й символ j-й строки должет бытьь равен "X", если место занято, и ".", если свободно.

Примеры
Стандартный ввод
6 7
X.....
......
....X.
X.....
......
..XX..
стандартный вывод
X....X
X....X
.X..X.
..XX..
..XX..

Порядовая рассадка:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
n, m = map(int, input().split())
A =[list(input()) for _ in range(n)]
 
def bitavia(base, k):
    for i in range(len(base)):
        for x in range(3):
            if x == 0:
                if base[i][0] == 'X' and base[i][5] == '.':
                    base[i][5] = "X"
                    k -= 1
                elif base[i][5] == 'X' and base[i][0] == '.':
                    base[i][0] = "X"
                    k -= 1
            elif x == 1:
                if base[i][1] == 'X' and base[i][4] == '.':
                    base[i][4] = "X"
                    k -= 1
                elif base[i][4] == 'X' and base[i][1] == '.':
                    base[i][4] = "X"
                    k -= 1
            elif x == 2:
                if base[i][2] == 'X' and base[i][3] == '.':
                    base[i][3] = "X"
                    k -= 1
                elif base[i][4] == 'X' and base[i][1] == '.':
                    base[i][2] = "X"
                    k -= 1
        if k == 0:
            return base
B = bitavia(A, m)
for row in B:
    print(''.join(row))
Поместная рассадка
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
n, m = map(int, input().split())
A =[list(input()) for _ in range(n)]
 
def bitavia(base, k):
    for i in range(len(base)):
        print(k)
        print(base)
        if base[i][0] == 'X' and base[i][5] == '.':
            base[i][5] = "X"
            k -= 1
            if k == 0:
                return base
        elif base[i][5] == 'X' and base[i][0] == '.':
            base[i][0] = "X"
            k -= 1
            if k == 0:
                return base
        if base[i][1] == 'X' and base[i][4] == '.':
            base[i][4] = "X"
            k -= 1
            if k == 0:
                return base
        elif base[i][4] == 'X' and base[i][1] == '.':
            base[i][4] = "X"
            k -= 1
            if k == 0:
                return base
        if base[i][2] == 'X' and base[i][3] == '.':
            base[i][3] = "X"
            k -= 1
            if k == 0:
                return base
        elif base[i][3] == 'X' and base[i][2] == '.':
            base[i][2] = "X"
            k -= 1
            if k == 0:
                return base
        if k == 0:
            return base
B = bitavia(A, m)
for row in B:
    print(''.join(row))n, m = map(int, input().split())
Пожалуйста, помогите решить задачу! Очень прошу, умоляю!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.01.2024, 12:38
Ответы с готовыми решениями:

Написать простой алгоритм Python "Посадка космического аппарата на Луну"
Никаких особых требований выдвинуто не было, задали написать обычный (не особо длинный, без...

Где этот самолёт
from tkinter import* def stormtrooper(x,y): sb=t.create_rectangle(x,y, x-10,y+70,...

Ковёр-самолёт
Ковёр-самолёт – Само собой, ковер этот волшебный, – отвечал незнакомец. – Говорят, будто...

2
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,707
20.01.2024, 21:53
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
ROW_LEN = 6
def get_seating(seating, seats_count, m):
    if seats_count + m > len(seating) * ROW_LEN:
        return
    if (seats_count + m) % 2 == 1:
        return
    for i in range(n):
        row = seating[i]
        if 'X' not in row:
            continue
        for j in range(ROW_LEN):
            if row[j] == 'X' and row[ROW_LEN-1-j] == '.':
                if m == 0:
                    return
                row[ROW_LEN-1-j] = 'X'
                m -= 1
    if m == 0:
        return seating
 
    for i in range(n):
        row = seating[i]
        for j in range(ROW_LEN // 2):
            if row[j] == row[ROW_LEN-1-j] == '.':
                if m < 2:
                    return
                row[j] = row[ROW_LEN-1-j] = 'X'
                m -= 2
                if m == 0:
                    return seating
 
n, m = map(int, input('n, m->').split())
seating = []
seats_count = 0
for _ in range(n):
    row = list(input('->'))
    seats_count += row.count('X')
    seating.append(row)
res = get_seating(seating, seats_count, m)
if not res:
    print('Impossible')
else:
    for row in res:
        print(''.join(row))
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,707
21.01.2024, 11:09
Ну или так:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
ROW_LEN = 6
def get_seating(seating, _0_count, _1_count, _2_count, m):
    m -= _1_count
    if not (0 <= m <= _0_count * 2 and m % 2 == 0):
        return
    for i in range(len(seating)):
        for j in range(ROW_LEN//2):
            if seating[i][j] == 1:
                seating[i][j] = 2
            if m and seating[i][j] == 0:
                seating[i][j] = 2
                m -= 2
    return seating
 
n, m = map(int, input('n, m->').split())
seating = []
_0_count = _1_count = _2_count = 0
for _ in range(n):
    row = input('->')
    row = [(row[i]+row[ROW_LEN-1-i]).count('X') for i in range(ROW_LEN//2)]
    _0_count += row.count(0)
    _1_count += row.count(1)
    _2_count += row.count(2)
    seating.append(row)
res = get_seating(seating, _0_count, _1_count, _2_count, m)
if not res:
    print('Impossible')
else:
    for row in res:
        s = ''.join('X' if num == 2 else '.' for num in row)
        s += s[::-1]
        print(s)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.01.2024, 11:09
Помогаю со студенческими работами здесь

За какое время можно посадить все самолеты?
Максим с детства имел тягу к самолетам, однако здоровье не позволило ему пройти медицинскую...

Составить базу данных о пассажирах самолета
1.Составить базу данных о пассажирах самолета, предусмотрев поля: Ф.И.О., багаж (вес, сумма...

Самолет может поднять 750 кг, если средний вес человека 70кг. Посчитать сколько человек может поднять самолет?
Напишите пожалуйста исходный код выражения задачи: Самолет может поднять 750 кг, если средний вес...

Создать иерархии наследования: самолет, корабль-водный самолет или исправить ошибки
a) Создать иерархии наследования: самолет, корабль - водный самолет. b) Создать иерархии...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru