Latar Belakang
Alice dan Bob memainkan permainan yang disebut membangun kata biner . Untuk memainkan game ini, Anda memperbaiki panjang n >= 0
, satu set G
dari panjang- n
kata biner disebut tujuan set , dan panjang- n
string yang t
berisi surat-surat A
dan B
, yang disebut urutan giliran . Permainan berlangsung n
bergantian, dan pada gilirannya i
, pemain ditentukan oleh t[i]
memilih sedikit w[i]
. Ketika permainan berakhir, para pemain melihat kata biner yang w
telah mereka buat. Jika kata ini ditemukan di set tujuan G
, Alice memenangkan permainan; kalau tidak, Bob yang menang.
Sebagai contoh, mari kita memperbaiki n = 4
, G = [0001,1011,0010]
dan t = AABA
. Alice mendapat giliran pertama, dan dia memilih w[0] = 0
. Giliran kedua juga milik Alice, dan dia memilih w[1] = 0
. Bob mendapat giliran ketiga, dan dia memilih w[2] = 0
. Pada belokan terakhir, Alice memilih w[3] = 1
. Kata yang dihasilkan,, 0001
ditemukan di G
, jadi Alice memenangkan permainan.
Sekarang, jika Bob memilih w[2] = 1
, Alice bisa memilih w[3] = 0
pada giliran terakhirnya, dan masih menang. Ini berarti bahwa Alice dapat memenangkan permainan tidak peduli bagaimana Bob bermain. Dalam situasi ini, Alice memiliki strategi kemenangan . Strategi ini dapat divisualisasikan sebagai pohon biner berlabel, yang bercabang pada tingkat yang sesuai dengan belokan Bob, dan yang setiap cabangnya berisi kata dari G
:
A A B A
-0-0-0-1
\
1-0
Alice bermain dengan hanya mengikuti cabang pada gilirannya; tidak peduli cabang mana yang dipilih Bob, Alice akhirnya menang.
Memasukkan
Anda diberikan sebagai input panjang n
, dan set G
sebagai daftar panjang string (mungkin kosong)n
.
Keluaran
Output Anda adalah daftar turn order yang mana Alice memiliki strategi kemenangan, yang setara dengan keberadaan pohon biner seperti dijelaskan di atas. Urutan pesanan belokan tidak masalah, tetapi duplikat dilarang.
Aturan rinci
Anda dapat menulis program atau fungsi lengkap. Dalam hal suatu program, Anda dapat memilih pembatas untuk input dan output, tetapi harus sama untuk keduanya. Hitungan byte terpendek menang, dan celah standar tidak diizinkan.
Uji Kasus
3 [] -> []
3 [000,001,010,011,100,101,110,111] -> [AAA,AAB,ABA,ABB,BAA,BAB,BBA,BBB]
4 [0001,1011,0010] -> [AAAA,BAAA,AABA]
4 [0001,1011,0010,0110,1111,0000] -> [AAAA,BAAA,ABAA,BBAA,AABA,AAAB]
5 [00011,00110,00111,11110,00001,11101,10101,01010,00010] -> [AAAAA,BAAAA,ABAAA,BBAAA,AABAA,AAABA,BAABA,AAAAB,AABAB]
Fakta Menarik
Jumlah pesanan belokan dalam output selalu sama dengan jumlah kata dalam set tujuan.
11101
dua kali; fakta menyenangkan masih berlaku untuk set. Zgarb, dapatkah input berisi elemen berulang, atau apakah ini kesalahan?