计蒜客 Frequent Subsets Problem 【暴力】

来源:互联网 发布:网吧网络为什么不卡 编辑:程序博客网 时间:2024/06/05 11:23



题意: 

       

        给你n个集合,每个集合m个数,再给你一个慨率s

        问所有数任意组合成的集合在n个集合中出现次数大于 s&n的有多少。

        sb超级阅读理解题。



题解:


        

        每个数用二进制记录他分别出现在那些集合里,因为集合最大50.so ll可以存下。

       然后依次枚举任意的数组合, 就是相互& ,& 完就结束了。



#include<bits/stdc++.h>using namespace std;#define ll long longll a[30];int test,cnt=0,con,n;ll ans=0;ll inf=(1ll<<55)-1;bool check(ll stat,ll num){    int ret=0;    ll t=stat#    while(t){        if(t&1) ret++;        t>>=1;    }    return ret>=con;}void dfs(ll stat,ll num){    if(num>n) return ;    dfs(stat,num+1);    if(check(stat,a[num])){        ans++;        dfs(stat&a[num],num+1);    }}int main(){    char c;    double xing,k;    cin>>n>>xing;    getchar();    while(~scanf("%d%c",&test,&c)){        a[test]|=(1<<cnt);        if(c=='\n'||c!=' '){            cnt++;        }    }    k=xing*cnt;    if(k-(ll)k>0) con=k+1;    else con=k;    dfs(inf,1);    cout<<ans<<endl;    return 0;}