MemSQL Start[c]UP 2.0 - Round 2 |
---|
Закончено |
Piegirl должна объединить две таблицы (операция join) распределенной базы данных, передавая минимально возможный объем трафика по сети.
Предположим, что имеются две таблицы A и B. Каждая из них состоит из нескольких строк, которые хранятся распределено. Кластер, в котором хранится таблица A, разделен на m частей, причем i-я часть кластера содержит ai строк таблицы A. Кластер, в котором хранится таблица B, разделен на n частей, причем i-я часть кластера содержит bi строк таблицы B.
С помощью одной сетевой команды, Piegirl может скопировать любую одну строку из любой части любого кластера в любую часть любого кластера. В итоге для любой строки из таблицы A и любой строки из таблицы B должна существовать часть какого-то кластера, в которой содержатся обе эти строки. За какое минимальное количество сетевых команд можно этого добиться?
Первая строка содержит два целых числа m и n (1 ≤ m, n ≤ 105). Вторая строка содержит m целых чисел, записанных через пробел, ai (1 ≤ ai ≤ 109). Третья строка содержит n целых чисел, записанных через пробел, bi (1 ≤ bi ≤ 109).
Выведите целое число — минимальное количество операций.
2 2
2 6
3 100
11
2 3
10 10
1 1 1
6
В первом примере оптимальным решением является: скопировать все недостающие строки во вторую часть второго кластера. В итоге, понадобится 2 + 6 + 3 = 11 операций.
Во втором примере оптимальное решение: скопировать все строки таблицы B в первую и вторую части первого кластера. Итого понадобится 2·3 = 6 операций.
Название |
---|