Подразделы

Другие разделы

Дата и время

28/03/2024 20:51:49

Авторизация

Имя:
Пароль:
Зарегистрироваться
Восстановить пароль
 

printРазбор задачи G. Взаиморасчеты

Тема: задача на идею, поиск инварианта
Сложность: сложная

В основу задачи положена задача M1258 из журнала Квант №12 за 1990г. (автор задачи О. Ижболдин).
Разбор решения задачи был опубликован в №12 за 1991г.

Для сведения задачи к рассмотренной в журнале и для избавления от дробных чисел выполним замену `a'_i=(a_i-S)*N`, где `S` – среднее арифметическое чисел `a_i`.
Среднее станет равным 0 и результат операции обмена будет иметь вид `a_{(i-1)\ mod\ N}+a_i,\ -a_i,\ a_{(i+1)\ mod\ N}+a_i`. При рассмотрении частичных сумм `b_i=∑_{j=0..i}\ a_j` можно обнаружить, что операция сводится к обмену значений `b_{i-1}` и `b_i`.
Таким образом, получение конечного распределения возможно, если последовательность частичных сумм для конечного распределения состоит из перемешанных произвольным образом чисел `b_i+d`, где `d` – некоторая константа, совпадающая с одним из `b_i` (при обмене с 1 человеком происходит сдвиг `b_i` по кругу). Константу легко найти с помощью сортировки частичных сумм для начального и конечного распределения.
Затем нужно привести последовательность частичных сумм для начального распределения в соответствие с последовательностью частичных сумм для конечного распределения с помощью обменов (аналог сортировки пузырьком).
Время работы алгоритма `O(N^2)`.
loading