暑假集训 || bitset
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的更多相关文章
- 2015UESTC 暑假集训总结
day1: 考微观经济学去了…… day2: 一开始就看了看一道题目最短的B题,拍了半小时交了上去wa了 感觉自己一定是自己想错了,于是去拍大家都过的A题,十分钟拍完交上去就A了 然后B题写了一发暴力 ...
- STL 入门 (17 暑假集训第一周)
快速全排列的函数 头文件<algorithm> next_permutation(a,a+n) ---------------------------------------------- ...
- 暑假集训Day2 互不侵犯(状压dp)
这又是个状压dp (大型自闭现场) 题目大意: 在N*N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. ...
- 暑假集训Day1 整数划分
题目大意: 如何把一个正整数N(N长度<20)划分为M(M>=1)个部分,使这M个部分的乘积最大.N.M从键盘输入,输出最大值及一种划分方式. 输入格式: 第一行一个正整数T(T<= ...
- 2013ACM暑假集训总结-致将走上大三征途的我
回想起这个暑假,从开始与雄鹰一起的纠结要不要进集训队,与吉吉博博组队参加地大邀请赛,害怕进不了集训队.当时激励我月份开始接触的,记得当时在弄运动会来着,然后就问了雄鹰一些输入输出的东西,怀着满心的期待 ...
- [补档]暑假集训D5总结
%dalao 今天又有dalao来讲课,讲的是网络流 网络流--从入门到放弃:7-29dalao讲课笔记--https://hzoi-mafia.github.io/2017/07/29/27/ ...
- [补档]暑假集训D1总结
归来 今天就这样回来了,虽然心里极其不想回来(暑假!@#的只有一天啊喂),但还是回来了,没办法,虽然不喜欢这个地方,但是机房却也是少数能给我安慰的地方,心再累,也没有办法了,不如好好集训= = %da ...
- 暑假集训——cf热身赛部分题有感加其题解
刚刚开始集训,集训队队长暂时还没有拉专题,而是拉了部分codeforces上过题人数在2000左右的题组成了一场热身赛(其实就是一场练习),花了一天时间终于把它刷完了,其中很多题让我学到了很多骚操作, ...
- Uestc_suibian 暑假集训总结
唉,终于组队了,终于可以只BB了,我就BB,我就不上! 和Xiper以及chenxh组队了- 下面是总结: day1 第一天吃饱喝足,然后就上路了,我一开始就看到了C题大水题,但是我不敢想象这道题居然 ...
随机推荐
- View Controller Programming Guide for iOS---(八)---Using View Controllers in the Responder Chain
Using View Controllers in the Responder Chain 响应链中使用视图控制器 View controllers are descendants of the UI ...
- Gradle系列之三 Gradle概述以及生命周期
1 Gradle是一种编程框架 gradle主要由以下三部分组成 1 groovy核心语法 2 build script block 3 gradle api 注:本章所有的代码都在 https:// ...
- K
https://codeforces.com/gym/101982/attachments K 打表暴力 /*#include<bits/stdc++.h> using namespace ...
- 【Tip】Python
『基本操作』 [查看Python所在目录] import os print(os.__file__) [查看已安装的包] pip list [获取当前脚本所在目录] import sys import ...
- pycharm命令行快捷启动
打开 本用户目录下的.bashrc文件 vim .bashrc 在末尾添加一行 alias pycharm="the-path-to-pycharm.sh" 最后保存退出 然后更新 ...
- iOS 监测电话呼入
1.首先引入CoreTelephony框架,代码里: @import CoreTelephony; 项目设置里: 2.定义属性,建立强引用: @property (nonatomic, strong) ...
- css width
转载:http://blog.csdn.net/dddddz/article/details/8631655
- Hdu 5458 Stability (LCA + 并查集 + 树状数组 + 缩点)
题目链接: Hdu 5458 Stability 题目描述: 给出一个还有环和重边的图G,对图G有两种操作: 1 u v, 删除u与v之间的一天边 (保证这个边一定存在) 2 u v, 查询u到v的路 ...
- iOS UILabel UITextView自适应文本,或文本大小自适应
//UILabel自适应文本的高度 UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(, , , )]; label.numberOf ...
- python programming
1. super 2. *args, **kwargs 3. class object 4. type 5. isinstance 6. list[:] = another_list