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?