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

Минимум максимума

02.03.2022, 13:18. Показов 6759. Ответов 4

Студворк — интернет-сервис помощи студентам
Задача:

Даны n нестрого возрастающих массивов Ai и m нестрого убывающих массивов Bj. Все массивы имеют одну и ту же длину
l. Далее даны q запросов вида (i,j), ответ на запрос – такое k, что max(Aik,Bjk) минимален. Если таких k несколько, можно вернуть любое.

Формат входных данных
На первой строке числа n,m,l (1≤n,m≤900;1≤ l≤3000). Следующие n строк содержат описания массивов Ai. Каждый массив описывается перечислением l элементов. Элементы массива – целые числа от 0 до 105−1. Далее число m и описание массивов Bj в таком же формате. Массивы и элементы внутри массива нумеруются с 1. На следюущей строке число запросов q (1≤q≤n⋅m). Следующие q строк содержат пары чисел i,j (1≤i≤n, 1≤j≤m).

Формат результата
Выведите q чисел от 1 до l – ответы на запросы.

Примеры
Входные данные
4 3 5
1 2 3 4 5
1 1 1 1 1
0 99999 99999 99999 99999
0 0 0 0 99999
5 4 3 2 1
99999 99999 99999 0 0
99999 99999 0 0 0
12
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3
4 1
4 2
4 3
Результат работы
3
4
3
5
4
3
1
2
2
4
4
3

Есть два решения:

Первое в лоб, разумеется не проходит по времени

sp_A, sp_B, AB_max = [], [], []
n, m, l = list(map(int, input().split()))
for i in range(n):
A = list(map(int, input().split()))
sp_A.append(A)

for j in range(m):
B = list(map(int, input().split()))
sp_B.append(B)

q = int(input())
for p in range(q):
i, j = list(map(int, input().split()))
for u in range(l):
AB_max.append(max(sp_A[i-1][u], sp_B[j-1][u]))
print(AB_max.index(min(AB_max))+1)
AB_max = []


Второе чуть быстрее, но в 3 секунды всё равно не укладывается

sp_A, sp_B, AB_max = [], [], []

n, m, l = list(map(int, input().split()))

for i in range(n):
A = list(map(int, input().split()))
sp_A.append(A)

for j in range(m):
B = list(map(int, input().split()))
sp_B.append(B)

q = int(input())

for p in range(q):
i, j = list(map(int, input().split()))
AB_max.append(max(sp_A[i-1][0], sp_B[j-1][0]))
x = 1
for u in range(1, l):
AB_max.append(max(sp_A[i-1][u], sp_B[j-1][u]))
if AB_max[u] <= AB_max[u-1]:
x = x+1
else:
break
print(x)
AB_max = []

Как сделать так, чтобы используя бинарый поиск уложиться в отведённое время?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.03.2022, 13:18
Ответы с готовыми решениями:

Нахождения максимума
Описать функцию нахождения максимума для двух величин. Ввести с клавиатуры a,b,c,d. Для каждой пары величин найти максимальную, а потом...

Три максимума
Прочитайте последовательность целых чисел. Выведите список, в котором сначала будут стоять первые три самых больших числа...

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

4
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
02.03.2022, 15:53
Ketlin_Morgan, а где ты используешь бин.поиск?
0
0 / 0 / 0
Регистрация: 02.03.2022
Сообщений: 4
02.03.2022, 16:54  [ТС]
Не использую, в том и проблема. Его нужно использовать, но я не понимаю, где его здесь прикрутить, массив то не отсортирован.

Добавлено через 55 минут
eaa, есть идеи, как это можно осуществить?
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
02.03.2022, 17:20
вроде по примеру правильно:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
n, m, l = map(int, input().split())
a =[list(map(int, input().split())) for _ in range(n)]
b =[list(map(int, input().split())) for _ in range(m)]
 
q = int(input())
for _ in range(q):
    i, j = map(int, input().split())
    i -= 1
    j -= 1
    # print(a[i])
    # print(b[j])
    lo = 0
    hi = l - 1
    m0 = max(a[i][hi], b[j][hi])
    while lo < hi:
        mid = (lo + hi) // 2
        mc = max(a[i][mid], b[j][mid])
        if mc < m0:
            m0 = mc
            hi = mid
        else:
            lo = mid + 1
    print(lo + 1)
0
0 / 0 / 0
Регистрация: 02.03.2022
Сообщений: 4
02.03.2022, 17:34  [ТС]
eaa, не проходит при 3 1 и 4 1. Получается 5 и 3 вместо 1 и 4
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.03.2022, 17:34
Помогаю со студенческими работами здесь

Индекс максимума последовательности
Добрый день! Условие задачи ниже: Условие Последовательность состоит из натуральных чисел и завершается числом 0. Определите...

Задача «Индекс максимума последовательности»
Последовательность состоит из натуральных чисел и завершается числом 0. Определите индекс наибольшего элемента последовательности. Если...

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

Оптимизация обновления максимума и минимума
Добрый вечер Сегодня мне попался код обновления максимума и минимума, решил его протестить на скорость Мне по синтаксису...

Минимум по х от максимума по у
Имеется функция f, зависящая от двух параметров х и у. Нужно найти минимум по х от максимума по у ото этой функции. Перепробовал много...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru