POJ

来源:互联网 发布:天启小米抢购软件 编辑:程序博客网 时间:2024/06/05 07:25

bitset详细讲解

首先bitset<10>bit(5); 就可以直接把5转化成了相应的二进制了. 但是如果要输出. 必须先强制转化成int才能输出. 下标从0开始. 然后就是bitset之间的操作只能用bitset来判断, 比如说判断是否等于0. 那么应该先定义bitset<10>bit(0); 然后判 (注意优先级)(bitset[5] & bitset[28] )== bit ? 不能直接写 == 0 . !!!

例题: POJ - 2443
//题意: 给你很多集合. 问两个数是否存在在同一个集合.
//思路: 每一个数用一个bitset来存. 在的集合序号对应的二进制出令成1. 那么判断是否存在再相同集合, 直接对应的bitset 与 一下就行, 如果等于0就不在, 否则就在.

AC Code

const int maxn = 1e4+5;void solve(){    int n;    scanf("%d",&n);    bitset<1005> bit[maxn];    for(int i=1;i<=n;i++){        int k; scanf("%d",&k);        while(k--){            int u; scanf("%d",&u);            bit[u][i] = 1;        }    }    int q;    scanf("%d",&q);    while(q--){        int u,v;        scanf("%d%d",&u,&v);        bitset<1005> tmp(0);        if((bit[u] & bit[v]) == tmp){            printf("No\n");        }        else            printf("Yes\n");    }}
原创粉丝点击