Форум » Обработка числовых последовательностей » Решил скинуть решения для 2660, 2661, 2662, 2663, 2664 и 2665 » Ответить

Решил скинуть решения для 2660, 2661, 2662, 2663, 2664 и 2665

VectorASD: Все ответы сошлись, а числотрон доказывается (для последних 4 задач), что в принципе другие ответы НЕ возможны, т.к. фактически тестирование проходит на абсолютно все разницы и ответ может выйти с сотней замен (при особых обстоятельствах) Для первых двух задач: [pre2] #Начал разработку: 9:26 #Время получения ответа: 9:32 (с первой попытки ;S) #Время модификации до мульти: 9:36 (с первой попытки ;S) def Z2660(): def Brain(Name, IsMax): with open(Name) as file: N = int(file.readline()) Data = [tuple(map(int, file.readline().split())) for i in range(N)] Sum = 0 Min = None for A, B in Data: A, B = sorted((A, B)) if IsMax: Sum += B else: Sum += A Razn = B - A if Razn % 3 != 0: if Min == None or Min >= Razn: Min = Razn if Sum % 3 == 0: if IsMax: Sum -= Min else: Sum += Min return Sum print("Ответ Z2660:", Brain("27-a.txt", True), Brain("27-b.txt", True)) print("Ответ Z2661:", Brain("27-1a.txt", False), Brain("27-1b.txt", False)) [/pre2] Для остальных четырёх: [pre2] def Chislotron(Arr, Sum): #Пользуйтесь на здоровье! Фактически он быстрее будет работать с файлами типа "b", т.к. там в основном куча разниц 1 и 2 def Recurs(Arr, Find): S = set(Arr) for Ch in sorted(S): if Ch < Find: A = Arr.copy() A.remove(Ch) Recurs(A, Find - Ch) elif Ch == Find: raise KeyError else: break if Sum == 0: return True try: Recurs(Arr, Sum) except KeyError: return True return False #Начал разработку: 9:48 #Время получения ответов (сразу мульти): 9:59 (Фигня с ответами) #Исправлял до новой технологии: 10:19 - 10:24 (Теперь все ответы верные!) def Z2662(): def Brain(Name, IsMax, Div): with open(Name) as file: N = int(file.readline()) Data = [tuple(map(int, file.readline().split())) for i in range(N)] Sum = 0 Arr = [] for A, B in Data: A, B = sorted((A, B)) if IsMax: Sum += B else: Sum += A Razn = B - A Arr.append(Razn) #print(Sum, Sum % Div) if Sum % Div != 0: V = 0 while True: if IsMax: Ch = Sum - V else: Ch = Sum + V if Ch % Div == 0: if Chislotron(Arr, V): break V += 1 Sum = Ch #print(" ", Sum, Sum % Div) return Sum print("Ответ Z2662:", Brain("27-2a.txt", True, 3), Brain("27-2b.txt", True, 3)) print("Ответ Z2663:", Brain("27-3a.txt", False, 3), Brain("27-3b.txt", False, 3)) #Обычный метод в первом числе дал бы 66480, что не верно :/ print("Ответ Z2664:", Brain("27-4a.txt", True, 5), Brain("27-4b.txt", True, 5)) #Обычный метод в первом числе дал бы 123430, что не верно :/ print("Ответ Z2665:", Brain("27-5a.txt", False, 5), Brain("27-5b.txt", False, 5)) Z2662() [/pre2]

Ответов - 0



полная версия страницы