fork download
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6. // Khai báo biến toàn cục
  7. int n; // Số lượng xâu
  8. int res = 0; // Biến lưu kết quả
  9. int need = (1 << 26) - 1; // Tổng OR cần đạt được
  10. vector<int> mask; // Mảng lưu giá trị của từng xâu
  11.  
  12. // Hàm quay lui để tính toán số cách chọn xâu
  13. void ql(int id, int val) {
  14. // id là vị trí xâu đang xét tới
  15. // val là tổng OR của các xâu đã được chọn
  16.  
  17. // Kiểm tra xem giá trị OR đã đạt được yêu cầu chưa
  18. if (val == need) {
  19. res++; // Tăng kết quả nếu đạt yêu cầu
  20. }
  21.  
  22. // Điều kiện dừng của đệ quy
  23. if (id > n) return;
  24.  
  25. // Nếu chọn xâu id
  26. ql(id + 1, val | mask[id]);
  27.  
  28. // Nếu không chọn xâu id
  29. ql(id + 1, val);
  30. }
  31.  
  32. int main() {
  33. cin >> n;
  34.  
  35. mask.resize(n + 1);
  36. for (int i = 1; i <= n; i++) {
  37. cin >> mask[i];
  38. }
  39.  
  40. ql(1, 0);
  41. cout <<res << endl;
  42.  
  43. return 0;
  44. }
  45.  
Success #stdin #stdout 0.01s 5272KB
stdin
8
the
quick
brown
fox
jumps
over
lazy
dog
stdout
0