Dang_Quan_10_Tin

VOI21_OR

Aug 9th, 2021 (edited)
269
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.72 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. using ll = long long;
  5. using ld = long double;
  6. using ull = unsigned long long;
  7.  
  8. constexpr bool typetest = 0;
  9. constexpr int N = 2e6 + 5;
  10. constexpr ll mod = 1e9 + 7;
  11. int n, k, l, r;
  12. int cnt[N];
  13. ll dp[N], gt[N], rgt[N], ans(0);
  14.  
  15. void Read()
  16. {
  17.     cin >> n >> k >> l >> r;
  18.     for (int i = 1; i <= n; ++i)
  19.     {
  20.         int v;
  21.         cin >> v;
  22.         ++cnt[v];
  23.     }
  24. }
  25.  
  26. ll Pow(ll a, ll b)
  27. {
  28.     ll ans(1);
  29.     for (; b; b >>= 1)
  30.     {
  31.         if (b & 1)
  32.             ans = ans * a % mod;
  33.         a = a * a % mod;
  34.     }
  35.     return ans;
  36. }
  37.  
  38. ll C(int k, int n)
  39. {
  40.     if (k > n)
  41.         return 0;
  42.     return gt[n] * rgt[k] % mod * rgt[n - k] % mod;
  43. }
  44.  
  45. #define bit(i, x) (((x) >> (i)) & 1)
  46.  
  47. void Solve()
  48. {
  49.     gt[0] = rgt[0] = 1;
  50.     for (int i = 1; i < N; ++i)
  51.     {
  52.         gt[i] = gt[i - 1] * i % mod;
  53.         rgt[i] = Pow(gt[i], mod - 2);
  54.     }
  55.     for (int i = 0; i < 20; ++i)
  56.         for (int j = 0; j < (1 << 20); ++j)
  57.             if (bit(i, j))
  58.                 cnt[j] += cnt[j ^ (1 << i)];
  59.  
  60.     for (int i = 0; i < (1 << 20); ++i)
  61.         dp[i] = C(k, cnt[i]) * ((__builtin_popcount(i) & 1) ? 1 : -1);
  62.  
  63.     for (int i = 0; i < 20; ++i)
  64.         for (int j = 0; j < (1 << 20); ++j)
  65.             if (bit(i, j))
  66.                 (dp[j] += dp[j ^ (1 << i)]) %= mod;
  67.  
  68.     for (int i = l; i <= r; ++i)
  69.         if (i % 3 == 0)
  70.             (ans += ((__builtin_popcount(i) & 1) ? dp[i] : -dp[i])) %= mod;
  71.     cout << (ans + mod) % mod;
  72. }
  73.  
  74. int32_t main()
  75. {
  76.     ios::sync_with_stdio(0);
  77.     cin.tie(0);
  78.     cout.tie(0);
  79.     int t(1);
  80.     if (typetest)
  81.         cin >> t;
  82.     for (int _ = 1; _ <= t; ++_)
  83.     {
  84.         Read();
  85.         Solve();
  86.     }
  87. }
Add Comment
Please, Sign In to add comment