พื้นหลัง
Alice และ Bob เล่นเกมที่เรียกว่าสร้างคำไบนารี ในการเล่นเกมที่คุณแก้ไขความยาวn >= 0, ชุดGของ length- nคำไบนารีที่เรียกว่าชุดเป้าหมายและ length- nสตริงtที่มีตัวอักษรAและBที่เรียกว่าคำสั่งเปิด เกมเป็นเวลาnผลัดกันและในทางกลับกันiผู้เล่นที่กำหนดโดยเลือกบิตt[i] w[i]เมื่อเกมสิ้นสุดลงผู้เล่นจะดูคำฐานสองที่wพวกเขาสร้าง หากพบคำนี้ในชุดเป้าหมายGอลิซชนะเกม มิฉะนั้นบ๊อบชนะ
ยกตัวอย่างเช่นการแก้ไขให้ของn = 4, และG = [0001,1011,0010] อลิซได้รับการเปิดครั้งแรกและเธอเลือกt = AABA เปิดสองยังเป็นของอลิซและเธอเลือกw[0] = 0 บ๊อบมีการเปิดสามและเขาเลือกw[1] = 0 ในการเลี้ยวโค้งสุดท้ายอลิซเลือกw[2] = 0 w[3] = 1คำที่เป็นผลลัพธ์0001ถูกพบในGดังนั้นอลิซชนะเกม
ตอนนี้ถ้าบ๊อบเลือกw[2] = 1อลิซอาจเลือกw[3] = 0ในรอบสุดท้ายของเธอและยังคงชนะ นั่นหมายความว่าอลิซสามารถชนะเกมได้ไม่ว่าบ็อบจะเล่นอย่างไร ในสถานการณ์เช่นนี้อลิซมีกลยุทธ์ชนะ กลยุทธ์นี้สามารถมองเห็นได้เป็นต้นไม้ไบนารีที่มีป้ายกำกับซึ่งแยกตามระดับที่สอดคล้องกับตาของบ๊อบและทุกสาขามีคำจากG:
A A B A
-0-0-0-1
\
1-0
อลิซแสดงตามกิ่งไม้ที่ตาเธอ ไม่ว่าสาขาไหนที่บ๊อบเลือกอลิซก็ชนะในที่สุด
อินพุต
คุณจะได้รับเป็น input ยาวnและชุดGเป็นรายการที่ (อาจจะเป็นที่ว่างเปล่า) nของสตริงที่มีความยาว
เอาท์พุต
ผลลัพธ์ของคุณคือรายการคำสั่งซื้อที่อลิซมีกลยุทธ์ในการชนะซึ่งเทียบเท่ากับการดำรงอยู่ของต้นไม้ไบนารีตามที่อธิบายไว้ข้างต้น คำสั่งซื้อของเทิร์นนั้นไม่สำคัญ แต่ต้องห้ามซ้ำซ้อน
กฎรายละเอียด
คุณสามารถเขียนโปรแกรมเต็มรูปแบบหรือฟังก์ชั่น ในกรณีของโปรแกรมคุณสามารถเลือกตัวคั่นสำหรับอินพุตและเอาต์พุต แต่ต้องเหมือนกันสำหรับทั้งสองโปรแกรม จำนวนไบต์ที่สั้นที่สุดชนะและช่องโหว่มาตรฐานไม่ได้รับอนุญาต
กรณีทดสอบ
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]
สนุกกับความเป็นจริง
จำนวนการสั่งซื้อทางกลับกันในการส่งออกคือมักจะเท่ากับจำนวนของคำในชุดประตู
11101สองครั้ง ความจริงก็ยังคงสนุกสำหรับชุด Zgarb อาจข้อมูลประกอบด้วยองค์ประกอบที่ซ้ำกันหรือเป็นข้อผิดพลาดหรือไม่?