Lý lịch
Alice và Bob chơi một trò chơi gọi là xây dựng một từ nhị phân . Để chơi trò chơi, bạn sửa một độ dài n >= 0
, một tập hợp G
các n
từ nhị phân có độ dài được gọi là bộ mục tiêu và một n
chuỗi dài t
chứa các chữ cái A
và B
, được gọi là thứ tự lần lượt . Trò chơi kéo dài theo n
lượt và đến lượt i
, người chơi được xác định bằng cách t[i]
chọn một chút w[i]
. Khi trò chơi kết thúc, người chơi nhìn vào từ nhị phân w
mà họ đã xây dựng. Nếu từ này được tìm thấy trong bộ mục tiêu G
, Alice thắng trò chơi; nếu không, Bob thắng.
Ví dụ, chúng ta hãy sửa chữa n = 4
, G = [0001,1011,0010]
và t = AABA
. Alice đến lượt đầu tiên, và cô chọn w[0] = 0
. Lượt thứ hai cũng là của Alice và cô ấy chọn w[1] = 0
. Bob có lượt thứ ba, và anh ta chọn w[2] = 0
. Ở lượt cuối cùng, Alice chọn w[3] = 1
. Từ kết quả 0001
, được tìm thấy trong G
, vì vậy Alice thắng trò chơi.
Bây giờ, nếu Bob đã chọn w[2] = 1
, Alice có thể đã chọn w[3] = 0
trong lượt cuối cùng của mình, và vẫn chiến thắng. Điều này có nghĩa là Alice có thể giành chiến thắng trong trò chơi cho dù Bob chơi như thế nào. Trong tình huống này, Alice có một chiến lược chiến thắng . Chiến lược này có thể được hình dung như một cây nhị phân có nhãn, phân nhánh ở các cấp tương ứng với lượt của Bob và mỗi nhánh có một từ từ G
:
A A B A
-0-0-0-1
\
1-0
Alice chơi bằng cách đơn giản là đi theo các nhánh trên lượt của mình; cho dù Bob chọn ngành nào, Alice cuối cùng cũng thắng.
Đầu vào
Bạn được cung cấp dưới dạng đầu vào độ dài n
và tập hợp G
dưới dạng danh sách các chuỗi có độ dài (có thể trống) n
.
Đầu ra
Đầu ra của bạn là danh sách các đơn hàng lần lượt mà Alice có chiến lược chiến thắng, tương đương với sự tồn tại của cây nhị phân như mô tả ở trên. Thứ tự của các đơn đặt hàng lần lượt không quan trọng, nhưng trùng lặp bị cấm.
Quy tắc chi tiết
Bạn có thể viết một chương trình đầy đủ hoặc một chức năng. Trong trường hợp của một chương trình, bạn có thể chọn dấu phân cách cho đầu vào và đầu ra, nhưng nó phải giống nhau cho cả hai. Số byte ngắn nhất sẽ thắng và các sơ hở tiêu chuẩn không được phép.
Các trường hợp thử nghiệm
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]
Sự thật thú vị
Số lượng lệnh lần lượt trong đầu ra luôn bằng số lượng từ trong mục tiêu được đặt.
11101
hai lần; thực tế thú vị vẫn giữ cho bộ. Zgarb, đầu vào có thể chứa các yếu tố lặp đi lặp lại, hoặc đây có phải là lỗi không?