Список вопросов
Как зайти в Даркнет?!
25th January, 01:11
4
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
891
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
947
0
Очень долго работает Update запрос Oracle
27th January, 09:58
912
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
937
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4380
0
Помогите пожалуйста решить задачи
24th November, 23:53
6084
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4350
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4395
0
Метода Крамера С++
23rd October, 11:55
4308
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2598
0
Решение задачи Два массива и обмены с Codeforces
С пояснением   Просмотров: 3158
Вам даны два массива a и b, оба состоят из n положительных (больших нуля) целых чисел. Также вам задано число k.
За один ход вы можете выбрать два индекса i и j (1≤i,j≤n) и поменять местами ai и bj (i.e. ai становится bj и наоборот). Заметьте, что i и j могут совпадать или отличаться (в частности, обмен a2 с b2 или обмен a3 с b9 оба считаются приемлемыми ходами).
Ваша задача — назвать максимальную возможную сумму, которую вы можете получить в массиве a, если вы сделаете не более k таких ходов (обменов).
Вам нужно ответить на t независимых наборов тестовых данных.
За один ход вы можете выбрать два индекса i и j (1≤i,j≤n) и поменять местами ai и bj (i.e. ai становится bj и наоборот). Заметьте, что i и j могут совпадать или отличаться (в частности, обмен a2 с b2 или обмен a3 с b9 оба считаются приемлемыми ходами).
Ваша задача — назвать максимальную возможную сумму, которую вы можете получить в массиве a, если вы сделаете не более k таких ходов (обменов).
Вам нужно ответить на t независимых наборов тестовых данных.
Код
#include using namespace std; int main() { int t; cin >> t; while (t--) { int n, k; cin >> n >> k; vector a(n); for (auto &it : a) cin >> it; vector b(n); for (auto &it : b) cin >> it; sort(a.begin(), a.end()); sort(b.rbegin(), b.rend()); int ans = 0; for (int i = 0; i < n; ++i) { if (i < k) ans += max(a[i], b[i]); else ans += a[i]; } cout << ans << endl; } return 0; }
 
 
 
 
 
Автор: Администратор
Автор: Администратор
Пояснение к задаче
Во время каждого хода мы можем брать минимальный элемент в a, максимальный элемент в b и поменять их (если минимум в a меньше, чем максимум в b). Если мы повторим эту операцию k раз, то мы получим ответ. Это можно сделать за O(n * n * n), O(n * n), но авторское решение работает за O(nlogn).
Комментарии
info@mycod.net  
Карта сайта  
Правообладателям
Заявка на расчет
×
или напишите нам прямо сейчас: