М
Молодежь
К
Компьютеры-и-электроника
Д
Дом-и-сад
С
Стиль-и-уход-за-собой
П
Праздники-и-традиции
Т
Транспорт
П
Путешествия
С
Семейная-жизнь
Ф
Философия-и-религия
Б
Без категории
М
Мир-работы
Х
Хобби-и-рукоделие
И
Искусство-и-развлечения
В
Взаимоотношения
З
Здоровье
К
Кулинария-и-гостеприимство
Ф
Финансы-и-бизнес
П
Питомцы-и-животные
О
Образование
О
Образование-и-коммуникации
avanesyan20011
avanesyan20011
18.06.2022 05:12 •  Информатика

На !
реализуйте алгоритм приближенного бинарного поиска.

входные данные

в первой строке входных данных содержатся числа n и k. во второй строке n чисел первого массива, отсортированного по неубыванию, а в третьей строке – k чисел второго массива. каждое число в обоих массивах по модулю не превосходит 2109.

выходные данные

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

примеры

входные данные

5 5

1 3 5 7 9

2 4 8 1 6

выходные данные

1

3

7

1

5

👇
Ответ:
Sestare852
Sestare852
18.06.2022

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

Пример реализации:

def bin_search(arr, target, kind="<="):

   assert kind in ["<=", ">="]

   if kind == "<=":

       comp = lambda a, b: a <= b

   else:

       comp = lambda a, b: a < b

   l = 0

   r = len(a) - 1

   while l < r - 1:

       m = (l + r) // 2

       if comp(a[m], target):

           l = m

       else:

           r = m

   if kind == "<=":

       return arr[l]

   else:

       return arr[r]

def nearest(arr, target):

   nearest_le = bin_search(arr, target, "<=")

   nearest_ge = bin_search(arr, target, ">=")

   if nearest_ge - target < target - nearest_le:

       return nearest_ge

   else:

       return nearest_le

_ = input()

a = [int(x) for x in input().split()]

a = [float("-Infinity")] + a + [float("+Infinity")]

for target in map(int, input().split()):

   print(nearest(a, target))

4,6(11 оценок)
Открыть все ответы
Ответ:
Jack123456789
Jack123456789
18.06.2022
У вас уже есть таблица с данными можно создать 2 запроса с справочником где будет взаимодействие с вашей таблицей и не будет такого что в 13:00 преподователь ведет пары в разных классах делаете сперва 1 запрос на лекции где он делит их согласно вашим предпочтениям далее второй запрос практика где так же указываете данные из таблиц и запросов потом немножко корректируете все проверяете и сохраняете запрос и жмете выполнить должно получится что он поделит их согласно установленного расписания вами в определенные дни указанные вами 
4,8(21 оценок)
Ответ:
bonipasol1
bonipasol1
18.06.2022
Хватит плодить однотипные вопросы. ответ уже был дан в предыдущей теме.
#include <iostream>
#include <Windows.h>

int main()
{
    int v;
    double S, t, t1, tmpT,tmpT1,b,tmpT3;

    std::cout << "V - km\h: ";
    std::cin >> v;
    std::cout << "\nS - km: ";
    std::cin >> S;
    std::cout << "\nT - hour: ";
    std::cin >> t;
    std::cout << "\nT1 - minut: ";
    std::cin >> t1;
    tmpT = S / v;
    t -= tmpT;
    tmpT3 = t - tmpT;
    if (tmpT3 < t)
    {
        std::cout << "edem bez ostanovok" << std::endl;
        system("pause");
        exit(1);
    }

    tmpT1 = (t * 60) / t1;
    b = (double)(int)tmpT1;
    std::cout << "kol ostanovok: " << b << std::endl;
    system("pause");
}
4,7(78 оценок)
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ