У мене є купа чистих шкарпеток, які я хочу сортувати по парах. На жаль, я можу брати шкарпетки лише з будь-якого кінця ворсу, а не з середини. Крім того, я можу видаляти шкарпетки з ворсу тільки за один раз. Моя стратегія полягає в тому, щоб спочатку розділити купу на одну або кілька менших паль. Я думаю, що деякі приклади це стануть зрозумілими. Я буду представляти кожен шкарпетку як натуральне число (відповідні цілі числа вказують рівні шкарпетки).
Якщо початкова купа шкарпеток є
1 2 3 3 2 1
тоді мені не потрібно робити ніяких розколів. Я можу зняти обидва 1шкарпетки, потім обидва 2шкарпетки, потім обидва 3шкарпетки.
Якщо замість цього початковий стоп
1 2 3 2 3 1
тоді я повинен спершу розділити його, тому що я не зможу з’єднати всі шкарпетки, просто видаливши їх з кінця. Одна з можливостей - це розділити його на дві палі
1 2 3 and 2 3 1
Тепер я можу зняти 1шкарпетки, залишаючи 2 3 and 2 3, слідом за 3шкарпетками, залишаючи 2 and 2і нарешті 2шкарпетки.
Ваша робота
З огляду на початкову купу шкарпеток, напишіть програму, яка розділить її на менші палі, що дозволить мені сортувати шкарпетки. Ваша програма повинна розділити купу на найменшу кількість можливих паль (якщо є кілька кращих рішень, вам потрібно знайти лише одне).
Вхід буде надано у вигляді списку, обмеженого рядка або іншої зручної форми. Він буде містити лише цілі числа між 1і деяким максимальним значенням n, при цьому кожне ціле число трапляється рівно двічі.
Вихід повинен складатися з вхідного списку, розділеного на менші списки, поданого в будь-якій зручній формі.
Приклади
Input Sample Output
1 1 1 1
1 2 1 2 1; 2 1 2
1 3 2 4 3 2 1 4 1 3 2; 4 3 2 1 4
1 2 3 4 3 4 1 2 1; 2 3; 4 3 4 1 2
1 1 2 2 3 3 1 1 2; 2 3 3
4 3 4 2 2 1 1 3 4 3 4 2; 2 1 1 3
Зауважте, що це не єдиний дозволений вихід для більшості цих входів. Для другого випадку, наприклад, результати 1 2; 1 2або 1 2 1; 2також будуть прийняті.
Дякуємо Sp3000 за кілька тестових пропозицій!
Я ненавиджу витрачати довгий час на сортування одягу, тому зробіть свій код якомога коротшим. Найкоротша відповідь у байтах виграє!
Примітки
- Мені не хочеться дивитися за шкарпетку, щоб побачити, чи є його відповідна пара, тому брати обидва шкарпетки в парі з одного кінця не дозволяється. Наприклад, якщо ворс
1 1 2 2тоді, ви не зможете залишити його як одну купу і взяти обидва1шкарпетки з лівого кінця.
123213можна поділити на 1; 23; 213( 1; 23; 213-> 1; 2; 21-> ; 2; 2)?
123213використовуючи лише дві палі, у Вашій відповіді доведеться дати один з двох стовпів.