#алгоритм
Задача заключается в том, чтобы посчитать количество возможных квадратных уравнений при заданных корнях. В программу поступает список длина списка и список с возможными корнями, к примеру [1,1,2,3] Нужно посчитать количество различных квадратных уровненный которые можно составить с парами из этого списка. В этом случае пары будут выглядеть так [(1, 1), (1, 2), (1, 3), (2, 3)]. Если хотя бы один коэффициент различается уравнения считаются разными. В этом примере максимальное количество 4. Максимальная длина входящего списка 2*10^5. А числа содержащиеся в списке по модулю не превышают 10^9. Время ограничено в 1 секунду. Память в 256 мегабайт. Очевидно, что для решения этой задачи не нужно в лоб строить все возможные уравнения. Достаточно посчитать количество не повторяющихся пар. Моё решение: import itertools N=int(input()) tmp=[int(i) for i in input().split()] lst=sorted(set(list(itertools.combinations(tmp, 2)))) print(len(lst)) Вроде бы компактно и просто, но по времени и памяти укладывается далеко не всегда. Результат тестировщика: AAAAAAAAAAAAAAAAWWWWAAAAAWWWWWAAATWWTTTMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM A = ACCEPTED = решение засчитано как верное W = Wrong Answer = неверный ответ на тесте T = Time limit exceeded = решение не уложилось в отведенное процессорное время M = Memory limit exceeded = решение не уложилось в отведенное ограничение по памяти Подскажите как можно более оптимально решить задачу. p.s. Вариант Harry, дал следующий результат: N=int(input()) tmp=[int(i) for i in input().split()] N = len(sorted(set(tmp))) M = (sum(tmp.count(x) - 1 for x in tmp) // 2) print(int(N*(N-1)/2+M)) AAWAAAAAAAAAWAWWWWWAAWAWWWWWWAWWWAWWWAAWWWAWWWAAWTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT
Ответы
Ответ 1
Ну, если я верно понял вашу задачу - из множества вам надо выбрать все различные пары. Сортируем (самая длинная операция, но сортировка 200000 элементов - дело очень быстрое...), и, линейно проходя, смотрим сколько есть разных значений корней - N сколько есть корней, которых одинаковых хотя бы 2 - M В вашем случае N=3, M=1. Все, искомое число - N*(N-1)/2+M (в вашем случае 3*2/2+1 = 4). Думаю, напишете сами? Потому как я в Python не сведущ... Но уверен - встроенная быстрая сортировка в Python есть :) Если же корни поступают так, как у вас - отсортированными - то вообще проблем нет. P.S. Если это общедоступный ресурс - дайте URL поиграться... P.P.S. Попробуйте этот код: #include#include
Комментариев нет:
Отправить комментарий