Saya memiliki setumpuk kaus kaki bersih yang ingin saya pisahkan menjadi pasangan. Sayangnya, saya hanya bisa mengambil kaus kaki dari kedua ujung tumpukan, bukan di tengah. Lebih lanjut, saya hanya dapat menghapus kaus kaki dari tumpukan pasangan yang serentak. Strategi saya adalah pertama membagi tumpukan menjadi satu atau lebih tumpukan yang lebih kecil. Saya pikir beberapa contoh akan memperjelas ini. Saya akan mewakili setiap kaus kaki sebagai bilangan bulat positif (bilangan bulat yang cocok menunjukkan kaus kaki yang sama).
Jika tumpukan kaus kaki awal adalah
1 2 3 3 2 1
maka saya tidak perlu melakukan pemisahan. Saya bisa menghapus kedua 1kaus kaki, lalu kedua 2kaus kaki, lalu kedua 3kaus kaki.
Jika bukan tumpukan awal adalah
1 2 3 2 3 1
maka saya harus membaginya terlebih dahulu karena saya tidak akan bisa memasangkan semua kaus kaki hanya dengan melepasnya dari ujungnya. Satu kemungkinan adalah membaginya menjadi dua tumpukan
1 2 3 and 2 3 1
Sekarang saya bisa melepas 1kaus kaki, pergi 2 3 and 2 3, diikuti 3kaus kaki, pergi 2 and 2, dan akhirnya 2kaus kaki.
Pekerjaan Anda
Mengingat tumpukan kaus kaki awal, tulis sebuah program yang akan membaginya menjadi tumpukan yang lebih kecil yang memungkinkan saya untuk menyortir kaus kaki. Program Anda harus membagi tumpukan menjadi jumlah tiang paling sedikit yang mungkin (jika ada beberapa solusi terbaik, Anda hanya perlu menemukan satu).
Input akan diberikan sebagai daftar, string yang dibatasi, atau bentuk lain yang sesuai. Ini hanya akan berisi bilangan bulat antara 1dan beberapa nilai maksimum n, dengan setiap bilangan bulat terjadi tepat dua kali.
Output harus terdiri dari daftar input yang dipecah menjadi daftar yang lebih kecil, diberikan dalam bentuk apa pun yang mudah.
Contohnya
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
Perhatikan bahwa ini bukan satu-satunya output yang diizinkan untuk sebagian besar input ini. Untuk kasus kedua, misalnya, output 1 2; 1 2atau1 2 1; 2 juga akan diterima.
Terima kasih kepada Sp3000 untuk beberapa saran pengujian!
Saya benci menghabiskan waktu lama menyortir pakaian saya, jadi buat kode Anda sesingkat mungkin. Jawaban terpendek dalam byte menang!
Catatan
- Saya tidak ingin harus melihat ke belakang kaus kaki untuk melihat apakah ada pasangan yang cocok, jadi mengambil kedua kaus kaki dengan sepasang dari ujung yang sama tidak diperbolehkan. Misalnya jika tumpukan itu
1 1 2 2maka Anda tidak akan dapat meninggalkannya sebagai satu tumpukan dan mengambil kedua1kaus kaki dari ujung kiri.
123213bisa dipecah menjadi 1; 23; 213( 1; 23; 213-> 1; 2; 21-> ; 2; 2)?
123213hanya menggunakan dua tumpukan, jawaban Anda harus memberikan satu dari dua tumpukan tumpukan.