CF1829H Don't Blame Me
状态压缩dp
:::& 结果<=64
:::有mod 不用 long long %mod 过程量用1ll*
:::i>>0~7

#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<bits/stdc++.h> #define ll long long #define ddd printf("-----------------debug\n"); using namespace std; const int maxn=2e5+10; const int mod=1e9+7; int f[maxn][100],n,k,a[maxn]; ll res; int main() { ios::sync_with_stdio(false); int T;cin>>T; while(T--) { res=0; for(int i=1;i<=n;i++) memset(f[i],0,sizeof(f[i])); cin>>n>>k; for(int i=1;i<=n;i++) { cin>>a[i];f[i][a[i]]=1;} for(int i=1;i<=n;i++){ for(int j=0;j<=64;j++) { f[i][j]=(1ll*f[i][j]+1ll*f[i-1][j])%mod; f[i][j&a[i]]=(1ll*f[i][j&a[i]]+1ll*f[i-1][j])%mod; } } for(int i=0;i<=64;i++) { int cnt=0; for(int j=0;j<=7;j++){ if(i>>j&1) cnt++; } if(cnt==k) res=(1ll*res+1ll*f[n][i])%mod; } cout<<res<<'\n'; } return 0; }