bitset是一个存储0和1的数组

可以快速的把两个bitset的每一位对应做与或啥的

在可以用01串表示某个状态的时候可以应用到它

就是有两个集合,求它们的交集

bitset <> a,b,c;
a[] = a[] = a[] = ;
b[] = b[] = b[] = b[] = ;
c = a & b;
cout << c << endl;
cout << "size = " << c.count() << endl;

HihoCoder 1513

题意:给出n个学生,他们5门课的排名,问对每个学生,每科都有多少人排在它前面

思路:n是30000,n^2在bitset下可以过的,因为每个学生的排名不同,所以bs[i][j]保存第 i 门课,排名为 j 的学生,有哪些人排名比他高

这里要注意储存的状态的选择,因为输出的时候每个学生我们只知道它该门课它的排名,而对于这门课来说,不同排名的人的bs数组肯定是不同的,所以 j 的状态选择即为排名为 j

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <bitset>
using namespace std;
const int SZ = ;
const int INF = ;
int mp[SZ][];
int a[SZ], b[SZ], c[SZ], d[SZ], e[SZ];
bitset<SZ> bs[][SZ], ans;
int main()
{
int n;
scanf("%d", &n);
for(int i = ; i <= n; i++)
{
scanf("%d %d %d %d %d", &a[i], &b[i], &c[i], &d[i], &e[i]);
mp[a[i]][] = i, mp[b[i]][] = i, mp[c[i]][] = i, mp[d[i]][] = i, mp[e[i]][] = i;
}
for(int i = ; i < ; i++)
for(int j = ; j <= n; j++)
{
bs[i][j] = bs[i][j-];
bs[i][j][mp[j-][i]] = ;
//cout << i <<" "<< j <<" "<< bs[i][j] << endl;
}
for(int i = ; i <= n; i++)
{
ans = bs[][a[i]] & bs[][b[i]] & bs[][c[i]] & bs[][d[i]] & bs[][e[i]];
printf("%d\n", ans.count());
}
return ;
}

Gym 100342J

题意:给n个城市,有些城市间有有向边,求三元环的个数(三元环:A->B->C->A)

思路:想不到bitset哇。。。把每个城市能到达的城市,和能被到达的用bitset表示出来

循环n个城市(A),对每个A找到它能到达的B(用vector存)

B能到达的城市,和A能被到达的城市,这两个集合的交集就是C,&一下然后count1的个数即可

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <bitset>
#include <vector>
using namespace std;
typedef long long LL;
const int SZ = ;
const int INF = ;
int vis[SZ][SZ];
char s[SZ][SZ];
bitset<SZ> bs[][SZ];
vector<int> v[SZ];
int main()
{
freopen("triatrip.in", "r", stdin);
freopen("triatrip.out", "w", stdout);
int n;
scanf("%d", &n);
for(int i = ; i < n; i++)
scanf(" %s", s[i]);
for(int i = ; i < n; i++)
for(int j = ; j < n; j++)
if(s[i][j] == '+')
{
bs[][i][j] = ;
bs[][j][i] = ;
v[i].push_back(j);
}
LL cnt = ;
for(int i = ; i < n; i++)
for(int j = ; j < v[i].size(); j++)
cnt += (LL)((bs[][v[i][j]] & bs[][i]).count());
printf("%lld\n", cnt/);
return ;
}

暑假集训 || bitset的更多相关文章

  1. 2015UESTC 暑假集训总结

    day1: 考微观经济学去了…… day2: 一开始就看了看一道题目最短的B题,拍了半小时交了上去wa了 感觉自己一定是自己想错了,于是去拍大家都过的A题,十分钟拍完交上去就A了 然后B题写了一发暴力 ...

  2. STL 入门 (17 暑假集训第一周)

    快速全排列的函数 头文件<algorithm> next_permutation(a,a+n) ---------------------------------------------- ...

  3. 暑假集训Day2 互不侵犯(状压dp)

    这又是个状压dp (大型自闭现场) 题目大意: 在N*N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. ...

  4. 暑假集训Day1 整数划分

    题目大意: 如何把一个正整数N(N长度<20)划分为M(M>=1)个部分,使这M个部分的乘积最大.N.M从键盘输入,输出最大值及一种划分方式. 输入格式: 第一行一个正整数T(T<= ...

  5. 2013ACM暑假集训总结-致将走上大三征途的我

    回想起这个暑假,从开始与雄鹰一起的纠结要不要进集训队,与吉吉博博组队参加地大邀请赛,害怕进不了集训队.当时激励我月份开始接触的,记得当时在弄运动会来着,然后就问了雄鹰一些输入输出的东西,怀着满心的期待 ...

  6. [补档]暑假集训D5总结

    %dalao 今天又有dalao来讲课,讲的是网络流 网络流--从入门到放弃:7-29dalao讲课笔记--https://hzoi-mafia.github.io/2017/07/29/27/   ...

  7. [补档]暑假集训D1总结

    归来 今天就这样回来了,虽然心里极其不想回来(暑假!@#的只有一天啊喂),但还是回来了,没办法,虽然不喜欢这个地方,但是机房却也是少数能给我安慰的地方,心再累,也没有办法了,不如好好集训= = %da ...

  8. 暑假集训——cf热身赛部分题有感加其题解

    刚刚开始集训,集训队队长暂时还没有拉专题,而是拉了部分codeforces上过题人数在2000左右的题组成了一场热身赛(其实就是一场练习),花了一天时间终于把它刷完了,其中很多题让我学到了很多骚操作, ...

  9. Uestc_suibian 暑假集训总结

    唉,终于组队了,终于可以只BB了,我就BB,我就不上! 和Xiper以及chenxh组队了- 下面是总结: day1 第一天吃饱喝足,然后就上路了,我一开始就看到了C题大水题,但是我不敢想象这道题居然 ...

随机推荐

  1. const常量

    1.不能给常量赋值 ; a=; 编译器报错:“a”: 不能给常量赋值

  2. Eclipse安装配置Maven

    Eclipse安装配置Maven 1 安装配置Maven 1.1 下载Maven 从Apache网站 http://maven.apache.org/ 下载并且解压缩安装Apache Maven.   ...

  3. iOS 拼音 Swift K3Pinyin

    iOS 系统方法支持直接获取拼音,避免了之前各种第三方引入各种MAP或者资源文件.下面是一个Swift版本的简单示例: // swift 4.0 func pinyin(_ string: Strin ...

  4. JAVA基础-面向对象06

    一.封装 1. 封装概念和体现 封装:包装的意思,隐藏被封装的事物的信息:生活中的包装:快递:食品:电子产品……方便:好看易用:安全: Java程序中的包装: 类:包装了同一类事物的共性信息: 函数: ...

  5. R Factor 如何转为c()

    从 R语言本身来说 > f [1] 130015.IB 130013.IB Levels: 130013.IB 130015.IB > data = c(f) > data [1] ...

  6. bzoj 2959: 长跑【LCT+并查集】

    如果没有环的话直接LCT 考虑有环怎么办,如果是静态的话就tarjan了,但是这里要动态的缩环 具体是link操作的时候看一下是否成环(两点已联通),成环的话就用并查集把这条链缩到一个点,把权值加给祖 ...

  7. IT兄弟连 Java Web教程 Servlet的生命周期

    JavaWeb应用的生命周期由Servlet容器来控制,而Servlet作为JavaWeb应用的最核心的组件,其生命周期也由Servlet容器来控制.Servlet的生命周期可以分为3个阶段:初始化阶 ...

  8. VS2017专业版使用最新版Qt5.9.2教程(最新教材)

    QT配置  Creator    ================================================================= 之前运行release版本或者de ...

  9. 洛谷 P3455 [POI2007]ZAP-Queries || 洛谷P2522,bzoj2301

    https://www.luogu.org/problemnew/show/P3455 就是https://www.cnblogs.com/hehe54321/p/9315244.html里面的方法2 ...

  10. AIDL(1):简介

    Android 接口定义语言 (AIDL) 1.AIDL是什么 AIDL(Android 接口定义语言)与您可能使用过的其他 IDL 类似. 您可以利用它定义客户端与服务使用进程间通信 (IPC) 进 ...