Форум » Обработка числовых последовательностей » #2693 » Ответить

#2693

Любитель кодить: Очень интересно в чем может быть у меня ошибка. Ответ под A не сходится когда B - верный. [pre2]f = open('27-33a.txt') _sum = 0 r1,r2,r3 = 10000,10000,10000 for i in f: a,b,c = map(int,i.split()) data=[a,b,c]; data=sorted(data) if (data[1]-data[0]) % 4 == 1 and (data[1]-data[0])<r1: r1 = (data[1]-data[0]) if (data[1]-data[0]) % 4 == 2 and (data[1]-data[0])<r2: r2 = (data[1]-data[0]) if (data[1]-data[0]) % 4 == 3 and (data[1]-data[0])<r3: r3 = (data[1]-data[0]) if (data[2]-data[0]) % 4 == 1 and (data[2]-data[0])<r1: r1 = (data[2]-data[0]) if (data[2]-data[0]) % 4 == 2 and (data[2]-data[0])<r2: r2 = (data[2]-data[0]) if (data[2]-data[0]) % 4 == 3 and (data[2]-data[0])<r3: r3 = (data[2]-data[0]) _sum += data[1] _sum += data[2] print(_sum) print(r1,r2,r3) if _sum % 4 == 0: print(_sum) if _sum % 4 == 1: print(_sum-r1) if _sum % 4 == 2: print(_sum-r2) if _sum % 4 == 3: print(_sum-r3)[/pre2]

Ответов - 8

ВишневецкаяН: У меня аналогичная ситуация, ответ в А не сходится, хотя В - всё верно. Посмотрела программу автора на Питоне, она выдаёт массив из минимальных разностей [148, 41, 94, 107], не поленилась, вычислила всё в Экселе, 41 и 107 получается, а разностей 148 и 94 нету в принципе. У меня ответ в А - 18284, а у вас?

Поляков: Оба подхода не учитывают, что оптимальная подходящая сумма может быть получена не одной, а несколькими заменами. Решение в файле 27data.zip это учитывает.

Любитель кодить: Поляков Поляков А где можно найти данный файл?


Поляков: Любитель кодить пишет: А где можно найти данный файл? Здесь: 27data.zip. А в начале файла ege27.doc приведен разбор подобной задачи и показано, как учесть множественные замены.

ДмитрийТараскин: Доброго времени суток! Решаю эту задачу по следующей логике: 1) Во время считывания файла сортирую каждую "тройку чисел" по убыванию 2) Записываю каждое число в отдельный массив (их три) Итого в первых двух массивах получаются самые большие числа в "тройках". 3) Складываю все числа в первом и во втором массиве и получаю 18474. Это самое большое число, которое только можно выбрать таким способом. 4) Конечно же оно не делится на 4, поэтому начинаю по очереди из 18474 в каждой "тройке" отнимать первый элемент и прибавлять третий , отнимать второй элемент и прибавлять третий (меняю по сути в каждой "тройке" первый элемент на третий или второй на третий и пересчитываю сумму) 5) Если получившийся результат делится на 4, то записываю в массив. 6) Нахожу максимальный элемент в массиве и это как раз ответ. Таким образом, получается, что я за одну замену стараюсь найти такое число. С тестовым примером в задании такой трюк сработал. С примером в файле В тоже. Честно говоря, не понимаю за счет чего может получится число 18380. В моем случае заменами мы только уменьшаем результат. Значит выгоднее всего сделать одну замену, чтобы сумма была максимальной. За две мы еще сильнее уменьшим результат. У меня тоже получается ответ 18284 (за одну замену), как и у одного из пользователей выше Объясните пожалуйста поподробнее каким образом тут может получиться число 18380 или где я не прав в своих рассуждениях. Решал похожие задания точно таким же способом, только с парами чисел и всегда срабатывало (во всех трех случаях). Тут тоже сработало на 2/3 примеров.

Поляков: ДмитрийТараскин пишет: Решаю эту задачу по следующей логике: Посмотрите разбор в начале этого файла. Там ищется оптимальный вариант с несколькими заменами.

ДмитрийТараскин: Также, если вариант с несколькими заменами все-таки имеет место быть, приведите пожалуйста пример, который легко проверить "вручную" или в Excel и увидеть, что действительно, алгоритм с одной заменой и алгоритм с несколькими заменами дают разные результаты, причем с несколькими заменами результат более подходящий, чем с одной

Поляков: ДмитрийТараскин пишет: если вариант с несколькими заменами все-таки имеет место быть, приведите пожалуйста пример, который легко проверить Рядом.



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