暑假集训 || 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题大水题,但是我不敢想象这道题居然 ...
随机推荐
- 笔记本创建wifi热点
如何在Win8系统上建立WIFI热点 | 浏览: 2511 | 更新: 2013-04-10 01:55 | 标签: win8 59 28 全文阅读分步阅读 步骤 1 2 3 4 5 6 7 8 ...
- BZOJ[4127] Abs
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=4127 不算难的样子,才见过此类模型. 首先可以发现每次修改只增不减,那么这$O(n)$的负数最 ...
- 算法练习--LeetCode--54. Spiral Matrix 100%
Spiral MatrixMedium Given a matrix of m x n elements (m rows, n columns), return all elements of t ...
- 基于FBX SDK的FBX模型解析与加载 -(二)
http://blog.csdn.net/bugrunner/article/details/7211515 5. 加载材质 Material是一个模型渲染时必不可少的部分,当然,这些信息也被存到了F ...
- 洛谷P4725 【模板】多项式对数函数(多项式运算)
传送门 前置芝士:微积分(有所了解即可)(可以看看这篇,写得非常详细我看了两章就看不下去了) 以下都是一些简单的教程切莫当真,仅供理解,建议看更严谨的 导数:对于一个函数$f(x)$,它的导数$f'( ...
- shell Syntax error: Bad fd number 错误解决
最近在玩spark , 需要看一下python的spark lib 是怎么加入环境变量的. 执行: sh -x bin/pyspark 报错 + dirname bin/pyspark + cd bi ...
- JVM内存模型详解
内存模型 内存模型如下图所示 堆 堆是Java虚拟机所管理的内存最大一块.堆是所有线程共享的一块内存区域,在虚拟机启动时创建.此内存区域唯一的目的就是存放对象实例.所有的对象实例都在这里分配内存 Ja ...
- 普通app自动化测试与手游app自动化测试的区别
[转载] 手游自动化测试与App自动化测试技术上的区别 手游和App的开发技术不同,导致了两者的自动化测试技术完全不同.一般来说,安卓应用是使用Android SDK开发的,利用Java编写.那么在A ...
- jquery $.trim()方法的介绍
http://www.jb51.net/article/50282.htm
- codeforces 629C Famil Door and Brackets (dp + 枚举)
题目链接: codeforces 629C Famil Door and Brackets 题目描述: 给出完整的括号序列长度n,现在给出一个序列s长度为m.枚举串p,q,使得p+s+q是合法的括号串 ...