bitset的用途挺多的,是一个比较骚的常数优化
一.很多位数的二进制数
poj 2443
直接开个1万位的二进制数,求交就行了。
有关集合求并交的时候可以考虑biset优化
#include#include #define REP(i, a, b) for(register int i = (a); i < (b); i++)#define _for(i, a, b) for(register int i = (a); i <= (b); i++)using namespace std;const int MAXN = 1e3 + 10;const int MAXM = 1e4 + 10;bitset s[MAXM];int main(){ int n; scanf("%d", &n); _for(i, 1, n) { int m, x; scanf("%d", &m); _for(j, 1, m) { scanf("%d", &x); s[x][i] = 1; } } int q; scanf("%d", &q); while(q--) { int a, b; scanf("%d%d", &a, &b); if((s[a] & s[b]).any()) puts("Yes"); else puts("No"); } return 0;}
二.可以优化01背包中当前状态是否存在的问题,可以在原来的基础上除以32
见这篇博客
三.在统计类问题中用集合中的并优化常数
见这道题