adfasdfadsfasdf

Untitled

Jul 14th, 2023
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.00 KB | None | 0 0
  1.  
  2. using u64 = unsigned long long;
  3. class Solution {
  4. public:
  5.     const int MOD = int(1e9) + 7;
  6.     u64 go(int idx, int pf_state, vector<int>& nums, array<u64, 2000>& pf_nums, array<array<u64, 1050>, 1050>& memo) {
  7.         if (idx == nums.size()) return 0;
  8.         if (memo[idx][pf_state] != -1) return memo[idx][pf_state];
  9.  
  10.         u64 out = 0;
  11.         if ((pf_state & pf_nums[idx]) == 0) {
  12.             auto without = go(idx + 1, pf_state, nums, pf_nums, memo);
  13.             auto with = go(idx + 1, pf_state | pf_nums[idx], nums, pf_nums, memo);
  14.             out = out + without;
  15.             out %= MOD;
  16.             out = (out + with + 1) % MOD;
  17.         } else {
  18.             out = go(idx + 1, pf_state, nums, pf_nums, memo);
  19.         }
  20.         memo[idx][pf_state] = out;
  21.         return out;
  22.     }
  23.     int squareFreeSubsets(vector<int>& A) {
  24.         array<u64, 2000> pf_nums = {};
  25.         vector<int> nums{};
  26.         nums.reserve(A.size());
  27.         for (auto num : A) {
  28.             if (num == 4 || num == 8 || num == 9 || num == 12 || num == 16) continue;
  29.             if (num == 18 || num == 20 || num == 24 || num == 25 || num == 27) continue;
  30.             if (num == 28) continue;
  31.  
  32.             nums.push_back(num);
  33.         }
  34.         const vector<int> primes = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29};
  35.  
  36.         for (auto idx = 0; idx < nums.size(); idx++) {
  37.             auto num = nums[idx];
  38.             int state = 0;
  39.             for (auto prime_idx = 0; prime_idx < primes.size(); prime_idx++) {
  40.                 auto prime = primes[prime_idx];
  41.                 while (num % prime == 0) {
  42.                    num /= prime;
  43.                    state |= (1 << prime_idx);
  44.                 }
  45.             }
  46.             pf_nums[idx] = state;
  47.         }
  48.  
  49.  
  50.         array<array<u64, 1050>, 1050> memo = {};
  51.         for (auto i = 0; i < 1050; i++) {
  52.             for (auto j = 0; j < 1050; j++) {
  53.                 memo[i][j] = -1;
  54.             }
  55.         }
  56.         return go(0, 0, nums, pf_nums, memo);
  57.     }
  58. };
  59.  
Advertisement
Add Comment
Please, Sign In to add comment