求调,悬关
查看原帖
求调,悬关
637788
kimi0705楼主2023/7/13 21:48
// Time: 2023-07-13 20:35:08
// Problem: H. Don't Blame Me
// Contest: Codeforces - Codeforces Round 871 (Div. 4)
// URL: https://codeforces.com/problemset/problem/1829/H
// Memory Limit: 256 MB
// Time Limit: 2000 ms
// Author: Zhong Jiaxuan
// Luogu: 637788
// Email: zhongjiaxuankimi@qq.com
// Tips:
//   - INT_MAX = 2147483647
//   - INT_MIN = -2147483648
// Tag:
//
// Powered by CP Editor (https://cpeditor.org)

#include <bits/stdc++.h>
#define int long long
#define db double
const int Mod = 1e9 + 7;
using namespace std;
const int N = 200010;
int t, n, k;
int arr[N];
int dp[2][64];
int num(int x) { return __builtin_popcount(x); }
signed main() {
  cin >> t;
  while (t--) {
    memset(dp[0], 0, sizeof dp[0]);
    memset(dp[1], 0, sizeof dp[1]);
    cin >> n >> k;
    for (int i = 1; i <= n; i++)
      cin >> arr[i];
    for (int i = 1; i <= n; i++) {
      dp[i % 2][arr[i]] = 1;
      for (int j = 0; j < 64; j++) {
        dp[i % 2][j] = (dp[i % 2][j] + dp[(i - 1) % 2][j]) % Mod;
        dp[i % 2][j & arr[i]] =
            (1LL * dp[i % 2][j & arr[i]] + dp[(i - 1) % 2][j]) % Mod;
      }
    }
    int ans = 0;
    for (int i = 0; i < 64; i++) {
      if (num(i) == k)
        ans += dp[n % 2][i], ans %= Mod;
    }
    cout << ans << '\n';
  }
  return 0;
}
2023/7/13 21:48
加载中...