Рассмотрим перестановку целочисленных значений из 1
в N
. Например, этот пример для N = 4
:
[1, 3, 4, 2]
Мы будем считать этот список циклическим, таким, что 1
и 2
рассматриваются как смежные. Одна величина, которую мы можем вычислить для такого списка - это общая квадратичная разница смежных значений:
(1-3)² + (3-4)² + (4-2)² + (2-1)² = 10
Ваша задача - найти перестановку, которая максимизирует эту величину, учитывая положительное целое число N
. В случае N = 4
приведенного выше примера не является оптимальным (на самом деле, это минимальный). Мы можем достичь общей разности квадратов 18
при следующей перестановке (а также нескольких других):
[1, 4, 2, 3]
Ваш алгоритм должен работать за полиномиальное время (of N
). В частности, вы не можете просто вычислить общую квадратичную разницу всех перестановок.
Вы можете написать программу или функцию, принимая ввод через STDIN (или ближайшую альтернативу), аргумент командной строки или аргумент функции и выводя результат через STDOUT (или ближайшую альтернативу), возвращаемое значение функции или параметр функции (out).
Вывод может быть в любом удобном, однозначном, плоском списке или строковом формате. Вы можете вернуть список со значениями от 0
до , N-1
а не 1
к N
.
Применяются стандартные правила игры в гольф .
Тестовые данные
Есть хорошее аналитическое решение этой проблемы. Например, все действительные решения для N = 10
эквивалентны следующему списку (до циклических сдвигов и реверсирования):
[7, 5, 6, 4, 8, 2, 10, 1, 9, 3]
Я не хочу раскрывать слишком многое за этим (хотя, вероятно, этого достаточно, чтобы выяснить закономерность), поэтому вместо того, чтобы давать больше примеров, вы можете проверить, что ваши результаты имеют следующие общие квадратичные различия для данного N
:
N Total squared difference
1 0
2 2
3 6
4 18
5 36
6 66
7 106
8 162
9 232
10 322
33 11936
100 333202
333 12308236
1000 333332002
Это запись OEIS A064842 (которая также содержит ссылку на статью с решением этой проблемы, если вы застряли).
(i<n/2||n%2)^i%2?i+1:n-i
.