题目链接
因为n只到20,直接利用二进制的位运算暴力解决,1代表有该元素,0代表没有该元素
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n;
double m;
stringstream ss;
string s;
int t;
int c[55];
int sum=0;
int main()
{
ios_base::sync_with_stdio(false);
memset(c,0,sizeof(c));
getline(cin,s);
ss<<s;
ss>>n>>m;
while(getline(cin,s))
{
ss.clear();
ss<<s;
while(ss >> t)
{
c[sum] |= ( 1<<(t-1) );
}
sum++;
}
int xx = ceil(m*sum);
int ans = 0;
int maxx = (1<<n);
for(int i=1;i<=maxx;i++)
{
int ct = 0;
for(int j=0;j<sum;j++)
{
if((i&c[j])==i)
{
ct++;
}
}
if(ct>=xx) ans++;
}
cout<<ans<<endl;
return 0;
}