Kami mengambil urutan bilangan bulat dari untuk , dan kami mendorong mereka ke tumpukan satu per satu secara berurutan. Di antara setiap dorongan, kita dapat memilih untuk mengeluarkan sejumlah item dari tumpukan (dari 0 hingga ukuran tumpukan saat ini).
Setiap kali kami mengeluarkan nilai dari tumpukan, kami akan mencetaknya.
Sebagai contoh, dicetak ketika kita melakukannya push, pop, push, pop, push, pop
.berasal dari push, push, push, pop, pop, pop
.
Namun, bukan hasil cetakan, karena tidak mungkin dimiliki dicetak diikuti oleh , tanpa melihat diantara.
Pertanyaan: Bagaimana kami bisa mendeteksi perintah yang mustahil?
Bahkan, berdasarkan pengamatan saya, saya telah keluar solusi potensial. Tetapi masalahnya adalah saya tidak bisa membuktikan bahwa pengamatan saya lengkap.
Program yang saya tulis dengan logika berikut:
Ketika nilai saat ini dikurangi nilai berikutnya lebih besar dari 1, nilai antara saat ini dan berikutnya tidak dapat muncul setelah berikutnya. Misalnya, jika saat ini = 3 dan berikutnya = 1, maka nilai antara saat ini (3) dan berikutnya (1) adalah 2 yang tidak dapat muncul setelah berikutnya (1), maka melanggar aturan.
Apakah ini mencakup semua kasus?
sumber
Jawaban:
Saya tidak dapat memahami pendekatan Anda dengan tepat (Tampaknya itu benar), tetapi ada aturan sederhana untuk pesanan yang tidak mungkin: Pesanan tidak mungkiniff ada ai,aj,ak seperti yang ai>ak>aj dan i<j<k . Untuk aai,aj,ak kami katakan triple bad.
Mengapa? Pertama, Anda harus membuktikan bahwa jika ada triple bad maka urutannya tidak mungkin, tetapi ini sederhana dan saya akan membiarkannya sebagai latihan (angka tengah tidak bisa muncul lebih cepat daripada lebih besar kecuali yang lebih kecil muncul sebelum mereka semua).
Kedua Anda harus membuktikan bahwa semua pesanan tidak mungkin memiliki setidaknya satu triple buruk, Asumsikan Anda memiliki urutan tanpa triple buruk, Anda dapat menemukan urutan push dan pop sehingga itu bukan urutan yang mustahil. Untuk merekonstruksi perintah push dan pop cukup gunakan pendekatan naif (operasi pop saat Anda mengulangi angka berurutan), tetapi untuk bukti formal (untuk kesederhanaan) Anda dapat menggunakan induksi, asumsikan untuk semua urutan panjangm jika tidak ada triple bad mereka tidak mungkin. Untuk urutan panjangn , Anda dapat mengatur operasi sebagai pop (mulai dari akhir urutan), saat bertemu dengan peningkatan angka berturut-turut, sekarang Anda memiliki urutan panjang m , dengan m < n , tanpa triple bad, sehingga Anda dapat merekonstruksi push dan pop untuk urutan ini, jadi yang asli tidak mustahil. mulai dari induksi adalah urutan panjang 3.
sumber