fork download
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. typedef long long ll;
  6. typedef pair<int, int> ii;
  7.  
  8. int n, m;
  9. int ans;
  10. ll a[15];
  11. int op[15];
  12. ll tmp[15];
  13. // +, -, *: 0, 1, 2
  14.  
  15. void backtrack(int i) {
  16. if (i == n) {
  17. for (int j = 1; j <= n; j++) tmp[j] = a[j];
  18.  
  19. // Tính toán các phép nhân trước
  20. for (int j = 1; j <= n - 1; j++) {
  21. if (op[j] == 2) {
  22. for (int k = j; k <= n - 1; k++) {
  23. if (op[k] == 2) {
  24. (tmp[j] *= tmp[k + 1]) %= m;
  25. }
  26. else {
  27. j = k - 1;
  28. break;
  29. }
  30. }
  31. }
  32. }
  33.  
  34. // Sau đó tính toán các phép cộng, trừ
  35. ll val = tmp[1];
  36. for (int j = 1; j <= n - 1; j++) {
  37. if (op[j] == 0) val += tmp[j + 1];
  38. if (op[j] == 1) val -= tmp[j + 1];
  39. }
  40.  
  41. val %= m;
  42. val = (val + m) % m;
  43.  
  44. ans += (val == 0);
  45.  
  46. return;
  47. }
  48.  
  49. for (int j = 0; j <= 2; j++) {
  50. op[i] = j;
  51. backtrack(i + 1);
  52. }
  53. } // O(3^n * n)
  54.  
  55. void solve() {
  56. cin >> n >> m;
  57. for (int i = 1; i <= n; i++) cin >> a[i];
  58.  
  59. ans = 0;
  60. backtrack(1);
  61.  
  62. cout << ans << '\n';
  63. }
  64.  
  65.  
  66. int main() {
  67. ios::sync_with_stdio(false);
  68. cin.tie(nullptr);
  69. int t; cin >> t;
  70.  
  71. while (t--) {
  72. solve();
  73. }
  74. }
  75.  
Success #stdin #stdout 0s 5320KB
stdin
1
4 2
5 5 5 9
stdout
14