Giả sử Amal và Bimal đang chơi một trò chơi. Họ có n hộp đựng với một hoặc nhiều sôcôla bên trong nó. Các thùng chứa này được đánh số từ 1 đến N, trong đó thùng chứa thứ i có số lượng sôcôla là [i]. Bây giờ trò chơi là như thế nào. Người chơi đầu tiên sẽ chọn một thùng chứa và lấy một hoặc nhiều sôcôla từ đó. Sau đó, người chơi thứ hai sẽ chọn một thùng chứa không rỗng và lấy một hoặc nhiều sôcôla từ đó, như thế này họ sẽ chơi xen kẽ. Khi một trong những người chơi không có cách nào để lấy bất kỳ viên sôcôla nào, thì người đó sẽ thua trò chơi. Nếu đến lượt của Amal trước, chúng ta phải tìm ra bao nhiêu cách để Amal có thể thực hiện nước đi đầu tiên, sao cho anh ta luôn thắng.
Vì vậy, nếu đầu vào giống như count =[2, 3], thì đầu ra sẽ là 1, bởi vì các vùng chứa ban đầu giống như [2, 3]. Họ có thể chơi như thế này
- Amal chọn một viên sô cô la từ hộp đựng thứ hai, vì vậy hiện tại [2, 2]
- Bimal chọn một sô cô la từ hộp đựng đầu tiên, vì vậy hiện tại [1, 2]
- Amal chọn một viên sô cô la từ hộp đựng thứ hai, vì vậy hiện tại [1, 1]
- Bimal chọn một sô cô la từ hộp đựng đầu tiên, vì vậy hiện tại [0, 1]
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- tmp:=0
- đối với mỗi c trong số đếm, thực hiện
- tmp:=tmp XOR c
- nếu tmp bằng 0, thì
- trả về 0
- nếu không,
- di chuyển:=0
- đối với mỗi c trong số đếm, thực hiện
- di chuyển:=di chuyển + (1 khi (tmp XOR c)
- di chuyển:=di chuyển + (1 khi (tmp XOR c)
- lượt về
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
def solve(count): tmp = 0 for c in count: tmp ^= c if not tmp: return 0 else: moves = 0 for c in count: moves += (tmp^c) < c return moves count = [2, 3] print(solve(count))
Đầu vào
[2, 3]
Đầu ra
1