帮忙把我的代码和题解对比一下QWQ,悬关
查看原帖
帮忙把我的代码和题解对比一下QWQ,悬关
637788
kimi0705楼主2023/7/13 22:00
// 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;
}

#include <bits/stdc++.h>

using namespace std;

const int N = 200010, mod = 1e9 + 7;

int f[N][64];
int n, k;
int a[N];

void solve() {
    cin >> n >> k;
    for (int i = 1; i <= n; i++) memset(f[i], 0, sizeof(f[i]));
    for (int i = 1; i <= n; i++) cin >> a[i];
    for (int i = 1; i <= n; i++) {
        f[i][a[i]] = 1;
        for (int j = 0; j < 64; j++) {
            f[i][j] = (1ll * f[i][j] + f[i - 1][j]) % mod;
            f[i][j & a[i]] = (1ll * f[i][j & a[i]] + f[i - 1][j]) % mod;
        }
    }
    int res = 0;
    for (int i = 0; i < 64; i++) {
        int cnt = 0;
        for (int j = 0; j < 6; j++) {
            if (i >> j & 1) cnt++;
        }
        if (cnt == k) res = (1ll * res + f[n][i]) % mod;
    }
    cout << res << '\n';
}

int main() {
    #ifdef DEBUG
    freopen("Test.in", "r", stdin);
    cout << "===================START===================" << endl;
    #endif

    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int T;
    cin >> T;
    while (T--) solve();

    #ifdef DEBUG
    cout << "====================END====================" << endl;
    #endif
    return 0;
}
2023/7/13 22:00
加载中...