Biểu thức logic
Đề bài
Mô tả
Một biểu thức logic là biểu thức gồm các biến (được kí hiệu bằng các chữ cái in thường, nhận giá trị là số nguyên bit không dấu) với các toán tử logic , , và các dấu ngoặc. Các toán tử thực hiện theo từng bit (như các toán tử &, |, ^ trong C++). Một biểu thức hợp lệ được định nghĩa như sau:
- Nếu là biến thì: là biểu thức hợp lệ; là biểu thức hợp lệ; , , là các biểu thức hợp lệ.
- Nếu là biểu thức hợp lệ thì: , , là các biểu thức hợp lệ.
Ví dụ: và là các biểu thức hợp lệ; là biểu thức không hợp lệ vì thiếu dấu ngoặc đóng; là biểu thức không hợp lệ vì thiếu cặp dấu ngoặc bao ở ngoài cùng.
Trong bài toán này chỉ xét biểu thức hợp lệ mà mỗi biến chỉ xuất hiện một lần.
Yêu cầu: Cho một phương trình có dạng "" trong đó là một biểu thức hợp lệ và là một số nguyên bit không dấu. Hãy đếm số các bộ giá trị của các biến (chỉ xét các biến có mặt trong , mỗi biến nhận một giá trị trong đoạn ) để khi thay vào biểu thức , ta thu được một đẳng thức đúng.
Dữ liệu vào
Dòng đầu tiên ghi số nguyên dương là số lượng bộ dữ liệu. Tiếp đến là dòng, mỗi dòng (tương ứng với một bộ dữ liệu) chứa một xâu có dạng "" trong đó là một biểu thức hợp lệ.
Trong biểu thức, mỗi toán tử được viết bằng chữ in hoa (AND, OR, XOR) và có đúng một dấu cách ở mỗi bên; dấu ngoặc viết liền với biến hoặc dấu ngoặc bên cạnh; dấu = có đúng một dấu cách ở mỗi bên.
Dữ liệu ra
Gồm dòng, mỗi dòng ghi một số nguyên là phần dư của phép chia số lượng các bộ giá trị để phương trình đúng cho (), tương ứng với các bộ dữ liệu theo thứ tự trong dữ liệu vào.
Ràng buộc
- .
- Số lượng biến trong mỗi biểu thức là với ; các biến là các chữ cái in thường đôi một khác nhau.
- .
Subtasks
- Subtask 1 ( điểm): biểu thức chỉ chứa phép , và .
- Subtask 2 ( điểm): biểu thức chỉ chứa phép , và .
- Subtask 3 ( điểm): và mỗi biểu thức chỉ chứa toàn phép hoặc chỉ chứa toàn phép .
- Subtask 4 ( điểm): và .
Biểu thức chỉ gồm một biến (không có toán tử) thỏa mãn điều kiện về phép toán của mọi subtask.
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
| 3 (a OR b) = 2 (a OR (b OR c)) = 3 (x XOR y) = 2 |
3 49 294967260 |
Với : bit có cách (ít nhất một trong hai biến có bit ), các bit còn lại bắt buộc cả hai bằng , nên có bộ. Với : mỗi cho đúng một , có bộ, phần dư là . |
| 3 c = 7 (d OR (e OR f)) = 0 ((p OR q) OR (r OR s)) = 5 |
1 1 225 |
Ví dụ bổ sung. Một biến chỉ có một giá trị thỏa mãn. Phép OR bằng khi mọi biến bằng . Với : bit và bit mỗi bit có cách, nên có bộ. |
| 3 ((a AND b) AND c) = 4294967295 (a AND b) = 0 (a XOR (b XOR c)) = 123 |
1 172174661 688856453 |
Ví dụ bổ sung. Phép AND bằng khi mọi biến bằng . Với : mỗi bit có cách, có bộ. Phép XOR của ba biến: chọn tự do , còn xác định duy nhất, có bộ. |
| 3 ((a OR b) AND c) = 1 (a OR (b AND c)) = 1 ((a XOR b) AND (c OR d)) = 2147483648 |
631292848 953624441 956260009 |
Ví dụ bổ sung, trộn các phép toán. Với : ở bit cần và ít nhất một trong bằng ( cách), ở mỗi bit khác giá trị phải là ( cách), nên có bộ. Hai phương trình sau lần lượt có và bộ. |
Bình luận