Одноцифрові числа (0–9) завжди дивні, а багатоцифрові числа, що є паліндромами, містять повтори.
Якщо n<10, тоді відповідь рівна n+1, інакше — 10.
Розділимо масив на зростаючі послідовності. Для цього перебираємо шеренгу: якщо s[i+1]>s[i], продовжуємо послідовність, інакше — починаємо нову послідовність.
Відповідь на задачу рівна максимальній довжині з усіх утворених послідовностей.
Шеренга з k коней є гарною, якщо її множина номерів рівна {1,2,…,k}. Тоді кількість таких шеренг дорівнює k!, а відповідь — n∑k=1k!.
Зауважимо, що для k>m маємо k!≡0(modm). Тому, якщо n>m суму можна обчислити для k=1,…,m.
Відповіддю буде результат такої суми: min(n,m)∑k=1k!(modm).
Нехай s — зафіксована шеренга
коней довжини n. Розгл’янемо всі
можливі рядки з n символів (від
a
до z
) впорядковані лексикографічно від
мінімального L=a…a
до максимального R=z…z.
За допомогою бінарного пошуку по цьому відрізку, використовуючи відповіді:
= — рядок вгадано,
< — наша спроба менша за s,
> — наша спроба більша за s,
можна знайти s за O(n⋅log26) запитів, що гарантує не більше 1000 спроб.
Для розв’язку необхідно трактувати рядки як числа в системі числення з основою 26 і реалізувати операції додавання і ділення на 2 в стовпчик. Також можна скористатись вбудованою в Python, C# або Java довгою арифметикою, вибрати межі для двійкового пошуку: L=0,R=26n−1 і перед виводом переводити числа в систему числення з основою 26.
Розглянемо декілька важливих фактів для розв’язку:
Для довільної групи коней з вагами ai1,ai2,…,aik мінімальна кількість ходів для приведення їх до одного значення дорівнює ∑kj=1|aij−x|, де оптимальне x — медіана цієї групи.
Оптимальну групу з k коней можна вибрати як підрядок відсортованого масиву. Тобто, після сортування масиву a отримуємо b1≤b2≤⋯≤bn.
Використавши ці факти можна зробити такий розв’язок:
Відсортувати масив a за неспаданням: b1,b2,…,bn.
За допомогою префіксних сум обчислимо суму елементів для швидкого підрахунку вартості перетворення.
Для кожного підрядка довжини k (тобто для кожного i від 1 до n−k+1):
Нехай медіаною є bm, де m=i+⌊k−12⌋ (для парного k можна обрати будь-який із середніх).
Обчислити вартість перетворення: cost=(bm⋅(m−i)−(Pm−1−Pi−1))+((Pi+k−1−Pm)−bm⋅(i+k−m−1)), де Pj=∑jt=1bt — префіксна сума, а P0=0.
Відповіддю буде мінімальна знайдена вартість серед усіх можливих підрядків.
Розглянемо розв’язок для n≤2⋅103. Нехай dp[i] — відповідь на задачі для масиву a1,…,ai, dp[0]=0. Тепер ми можемо перебрати індекс найправішого видаленого числа j та оновити dp[i] значенням dp[j−1]+(aj+1⊕aj+2⊕⋯⊕ai). Таку динаміку можна порахувати за O(n2).
Для того ж щоб здати задачу на повний бал необхідно здогадатись, що оптимально аби між видаленими елементами було не більше ніж 2⋅log2A, де A — це максимально допустиме значення в масиві. При заданих обмеженнях достатньо перевірити щонайбільше 60 варіантів який елемент буде найправішим видаленим .
Оскільки з кожної ділянки виходить рівно одна доріжка, отримуємо функціональний граф. Кожна компонента такого графа складається з циклу, до якого «притікають» вершини, що знаходяться поза циклом.
Нехай для кожної ділянки u ми обчислили:
d(u) — мінімальну кількість ходів від u до входу в цикл (тобто до першої вершини, що повторюється);
id(u) — ідентифікатор компоненти, до якої належить u;
p(u) — позицію вершини u на циклі (якщо u вже в циклі).
За умовою, кожен кінь може за одну хвилину або залишитися на місці, або пройти за своєю єдиною доріжкою. Тому, якщо кінь стартує з u, то він може потрапити у вершину ft(u) за t ходів, а завдяки можливості чекати — залишатися в цій же вершині будь-який час після t.
Розглянемо запит із початковими ділянками u та v :
Якщо id(u)≠id(v), їхні шляхи не перетнуться, тому відповідь −1.
Якщо fd(u)(u)=fd(v)(v) то зустріч відбудеться у деревовидній частині, а саме у найнижчому спільному предок вершин u та v.
Якщо ж жодна з попередніх умов не виконується, то коні зустрінуться на циклі. Можна показати, що оптимальне місце зустрічі буде або у вершині fd(u)(u) або fd(v)(v).