Я знаю, что это концептуальный сайт, и задавать вопросы типа домашнего задания не приветствуется. Итак, прежде чем я попрошу о помощи, вот краткая информация обо мне: я конкурентоспособный программист и занимаюсь этим как своим хобби.
Во время недавнего конкурса я столкнулся с таким вопросом: https://atcoder.jp/contests/abc334/tasks/abc334_c
Теперь логика, которую я использовал для решения этого вопроса
Эту задачу можно рассматривать как задачу, в которой требуется составить пары $\left\lfloor\frac{K}{2}\right\rfloor$ из одного носка каждого цвета $A_1, A_2, \ldots, A_K$. Если $K$ четное, кажется оптимальным спаривание $\left(A_1, A_2\right),\left(A_3, A_4\right), \ldots,\left(A_{K-1}, A_K\right) $, так что соседние цвета (в отсортированной последовательности) образуют пары, что действительно так.
Проблема в том, что $K$ нечетно. В этом случае мы можем перебрать единственный цвет, который не является парным, где можно найти оптимальный способ создания пар из других носков, как мы это делали для четного $K$. Когда фиксирован единственный цвет, который не спарен, минимальная общая странность, когда остальные носки спарены, наивно находится за время $O(N)$, но в результате получается $O\left(N^2\right )$ сложность. Вместо этого можно заранее рассчитать общую странность, когда первые несколько носков спарены, например, presum $[2]=\left(A_2-A_1\right), \operatorname{presum}[4]=\left(A_4-\right .$ $\left.A_3\right)+\left(A_2-A_1\right)$, предполагается $[6]=\left(A_6-A_5\right)+\left(A_4-A_3\right)+\left (A_2-A_1\right), \ldots$, в виде префиксной суммы; можно также найти «суффиксную сумму». Таким образом, задачу можно решить всего за $O(N)$ времени.
Когда мы используем этот подход и пытаемся решить вопрос, мы получаем ошибку TLE из-за временных ограничений задач. При проверке редакционной статьи единственный способ избавиться от этого TLE — использовать эту оптимизацию:
Когда $K$ нечетное значение, вместо грубого перебора всех носков, которые не являются в паре можно попробовать только $A_1, A_3, A_5, \ldots, A_K$ . В следующем примере кода мы используем этот метод для упрощения выполнение.
Я не могу понять, почему не стоит пробовать A2, A4 и все остальные, даже индексированные элементы? Может кто-нибудь помочь мне или хотя бы намекнуть на логику этой оптимизации. Спасибо
Редактировать: я не могу починить здесь свой латекс, может ли кто-нибудь помочь и с этим. Я добавил изображение алгоритма, который использовал. И все, что я пытаюсь объяснить с помощью латекса.
SO не поддерживает LaTeX, как это делают некоторые другие сайты - визуализируйте его и просто добавляйте изображения (другой пользователь может вставлять изображения из ссылок, если у вас недостаточно репутации, чтобы сделать это напрямую)
«Я наткнулся на этот вопрос [ссылка]»: хотя ссылки на другие сайты могут быть полезны для получения справочной информации, вся важная информация должна быть включена в вопрос. Пожалуйста, процитируйте описание проблемы с кодом.
Все эти типы проблем связаны с алгоритмическим проектированием, а не с кодированием. С таким плохим объяснением в редакционной статье, даже признав, что мне не удалось доказать ключевые части официального решения, я бы вообще избегал этого соревнования.
На каком языке вы отправили заявку? Описанный вами алгоритм легко переходит на C++.
@SimonGoater Тот факт, что даже индексы можно игнорировать, даже близко не является ключевой частью решения; он использовался только для упрощения реализации. Можно легко пройти, просто проверив все индексы.



Допустим, вы оставили четный носок x. Все носки с обеих сторон, за исключением соседних, должны быть в парах с соседними носками, поэтому вокруг x вы получите такую ситуацию:
a x b
Если вы пропустите x, вам придется соединить a и b, а стоимость составит b-a. Если вместо этого вы опустите a или b, вы всегда получите лучший результат с затратами x-a или b-x.
... так что вам никогда не придется отказываться от носков с четными номерами.
Однако обратите внимание, что даже без этой оптимизации ваш алгоритм должен иметь линейное время, и не должно быть никаких шансов получить TLE, учитывая ограничения в задаче.
Добро пожаловать в ТАК! Что именно вы пробовали до сих пор? Мы здесь гораздо больше, чтобы помочь с конкретными вопросами типа «Я попробовал X, но он не дал того, что я ожидал, и вместо этого привел к ошибке!» сопровождается Минимальным, полным и проверяемым примером