Можна або знайти суму і мінімум, або посортувати усі вартості та додати всі крім найменшої.
Поставимо значення 1, 2, , в такому порядку на непарні позиції, та значення , , на парні. Наприклад, для вийде [1, 5, 2, 6, 3, 7, 4].
У такій побудові , а отже . Тобто усі значення будуть рівні , де .
Всі такі значення дають різні остачі при діленні на .
Якщо в рядку є 1 чи 2 різні символи, то не вийде використати менше, а отже можна взяти .
Далі якщо взяти =abcabcab...
, то в немає підрядків паліндромів крім
підрядків з 1 символа. Отже, буде
палідромно меншим за .
Можливо показати, що неможливо, щоб в було менше ніж 3 різних символів, якщо
розглянути підрядок вигляду
ab...bc
.
Існує не більше 24 різних маршрутів. Це так, бо більшість поворотів буде відбуватись в куті поля (якщо видаляти вже відвідані клітинки), а отже буде тільки 1 варіант куди іти далі.
Тому можливо згенерувати повним перебором усі маршрути, подивитись, які з них завершуються в потрібній клітинці та вибрати з них найдовший.
E. Перестановка з двох масивів
Розглянемо кожен біт окремо. Подивимось скільки в результаті повинно бути чисел, в яких цей біт 1 і скільки таких, в яких 0. Позначимо це та . Якщо , то існує не більше одного варіанту, яким цей біт може бути в та . Це так тому, що та непарні. Розглянемо випадок, коли . Таке можливо лише якщо ділиться на , а також якщо всі елементи перестановки проксорити з , то це теж буде перестановкою. Тобто в цьому випадку можливими є 2 варіанти, якими значеннями можуть бути біти в та , обидва нам або одночасно підходять, або не підходять. Спробуємо будь-який з них, перевіримо чи в результаті вийшла перестановка. Якщо так, то відповідь рівна , де — найбільший степінь 2, що ділить .
Іншим розв’язком буде подивитись на xor усіх чисел. З цього можливо знайти . Замінимо всі значення другого масиву . Далі обидва масиви потрібно ксорити з , подивимось чи немає однакових значень. Можна перебрати, яке значення буде в результаті 0 та префіксним деревом перевірити, чи всі решта чисел виходять менші . Або також можна для кожного значення згенерувати проміжки , коли значення будуть менші .
Розглянемо 3 вежі та . Використовувати кабель між 1 і 3 вежею не вигідно: або ми не можемо його провести або вигідніше його замінити на менші кабелі, бо та .
Тепер нас цікавлять тільки такі пари веж, що всі вежі між ними менші за обидві крайні. Зрозуміло, що такий кабель не буде перетинатись з іншими вежами. А також таких пар веж є , згенерувати їх можна, якщо розглядати вежі зліва направо та підтримувати спадний стек.
Тож згенеруємо всі такі пари та знайдемо найменший каркас алгоритмом Крускала.
Розглянемо останню операцію, нехай вона . Нам потрібно, щоб для конкретного біта, в цей біт був 1, а в 0.
Припустимо, що ми отримали використовуючи операцію . Тоді . Якщо ж з іншого боку залишити для останньої операції і зробити операцію , то вийде . Таким чином ми отримаємо не гірше значення і зліва і справа — зліва буде не менше 1, а справа не менше 0. З цього можна зробити висновок, що має бути одним з оригінальних чисел набору. Переберемо його і залишимо тільки ті біти, де 0.
Ми можемо отримати , тобто усі значення крім одного з запереченням. Щоб в такому значенні був біт 0 потрібно, щоб у всіх крім одного значеннях, цей біт був 1, а в одному 0.
Назвемо біт унікальним, якщо він рівний 0 в рівно одному значенню. Назвемо значення унікальним, якщо воно містить хоча б один унікальний біт. Якщо існує не унікальне значення, то можна отримати , якщо його обрати як значення без заперечення. Якщо , то точно існує неунікальне значення, а отже .
Інакше все одно можна розглядати лише значення . Це так тому, що які б операції ми не робили, унікальні біти одного з початкових значень залишаться 0. А розглядаючи тільки такий вигляд в нас вийдуть всі інші біти 1.
Тому для кожного запиту, якщо , то відповідь рівна мінімальній кількості одиничних бітів на проміжку. Якщо , то можна перебрати, яке значення та яке значення беремо в без заперечення. Тобто відповідь на запит можна знайти за .