大杀器Bitset
其实并不怎么会用,有一次有位学长提到了这个名字,就这么取题目了。
1.BZOJ 3687 简单题
求子集的算术和的异或和
http://www.lydsy.com/JudgeOnline/problem.php?id=3687
我们并不需要知道每个数(和)出现了多少次,只需知道它出现了奇数次还是偶数次,于是用一个二进制串表示。初始化dp[0]=1;
加进一个数x,在原先集合的基础上,每个数+x出现的次数会++,就直接异或上集合左移x
//Twenty
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<queue>
#include<vector>
#include<bitset>
using namespace std;
const int maxn=+;
bitset<maxn>b;
int n,x,sum,ans;
int main()
{
scanf("%d",&n);
b[]=;
while(n--){
scanf("%d",&x);
sum+=x;
b^=(b<<x);
}
for(int i=;i<=sum;i++)
if(b[i])
ans^=i;
printf("%d\n",ans);
return ;
}
BZOJ 3687 简单题
2.BZOJ 4478 侦探jyy
一开始我和SXY大佬都写了一种神奇地求出一个top即某两个点的上面的一个交点来判断是否一定发生的算法,虽然SXY的算法比我不知道高到哪里去了。骗了50分。然后轩神说,会有这种神奇的情况,没有交点,但是C发生了D一定发生

于是正解是,对于每个发生的事件,向前跑一遍会导致它发生的集合,然后这些集合的交集即为答案。
这个就可以用Bitset来搞。
//Twenty
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<queue>
#include<vector>
#include<bitset>
const int N=+;
const int M=+;
using namespace std;
bitset<N>d[N],ans;
int xx,x,y,cntz,cntf,n,m,D,firz[N],nxtz[M],toz[M],firf[N],nxtf[M],tof[M],vis[N];
inline int read(){
char ch=getchar(); int ret=,f=;
while(ch!='-'&&(ch>''||ch<'')) ch=getchar();
if(ch=='-') f=-,ch=getchar();
for(;ch>=''&&ch<='';ch=getchar()) ret=ret*+ch-'';
return ret*f;
}
void addz(int u,int v){
nxtz[++cntz]=firz[u]; firz[u]=cntz; toz[cntz]=v;
}
void addf(int u,int v){
nxtf[++cntf]=firf[u]; firf[u]=cntf; tof[cntf]=v;
}
void dfs1(int x){
vis[x]=; d[x][x]=;
for(int i=firz[x];i;i=nxtz[i]){
if(!vis[toz[i]])
dfs1(toz[i]);
d[x]|=d[toz[i]];
}
}
void dfs2(int x){
vis[x]=; //d[x][x]=1;
bitset<N>tmp;
if(firf[x]){
if(!vis[tof[firf[x]]]) dfs2(tof[firf[x]]);
tmp=d[tof[firf[x]]];
}
else return;
for(int i=nxtf[firf[x]];i;i=nxtf[i]){
if(!vis[tof[i]]) dfs2(tof[i]);
tmp&=d[tof[i]];
}
d[x]|=tmp;
}
int main()
{
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
n=read(); m=read(); D=read();
for(int i=;i<=m;i++){
x=read(); y=read();
x--; y--;
addz(x,y);
addf(y,x);
}
for(int i=;i<n;i++)
if(!vis[i]) dfs1(i);
memset(vis,,sizeof(vis));
for(int i=;i<=D;i++){
scanf("%d",&xx); xx--;
if(!vis[xx]) dfs2(xx);
ans|=d[xx];
}
for(int i=;i<n;i++){
if(ans[i])
printf("%d ",i+);
}
return ;
}
BZOJ 4478 侦探jyy
有人提供了一种神奇的算法,枚举每个不是发生点的点,把它标记为未发生,然后再这个限制条件下跑一遍看是否所以发生点都可以发生,若不能则此点一定发生。时间复杂度好像没保证,不过这个随机数据过掉了。
大杀器Bitset的更多相关文章
- 使用docker-compose 大杀器来部署服务 上
使用docker-compose 大杀器来部署服务 上 我们都听过或者用过 docker,然而使用方式却是仅仅用手动的方式,这样去操作 docker 还是很原始. 好吧,可能在小白的眼中噼里啪啦的对着 ...
- 使用docker-compose 大杀器来部署服务 上(转)
使用docker-compose 大杀器来部署服务 上 我们都听过或者用过 docker,然而使用方式却是仅仅用手动的方式,这样去操作 docker 还是很原始. 好吧,可能在小白的眼中噼里啪啦的对着 ...
- Postgresql-模糊匹配大杀器
# Postgresql-模糊匹配大杀器 ## 问题背景 随着pg越来越强大,abase目前已经升级到5.0(postgresql10.4),目前abase5.0继承了全文检索插件(zhparser) ...
- [NewLife.XCode]反向工程(自动建表建库大杀器)
NewLife.XCode是一个有10多年历史的开源数据中间件,支持nfx/netstandard,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode. 整个系列教程会大量结合示 ...
- 一文读懂机器学习大杀器XGBoost原理
http://blog.itpub.net/31542119/viewspace-2199549/ XGBoost是boosting算法的其中一种.Boosting算法的思想是将许多弱分类器集成在一起 ...
- [转]使用docker-compose 大杀器来部署服务 上
本文转自:https://www.cnblogs.com/neptunemoon/p/6512121.html 使用docker-compose 大杀器来部署服务 上 我们都听过或者用过 docker ...
- 离群点检测与序列数据异常检测以及异常检测大杀器-iForest
1. 异常检测简介 异常检测,它的任务是发现与大部分其他对象不同的对象,我们称为异常对象.异常检测算法已经广泛应用于电信.互联网和信用卡的诈骗检测.贷款审批.电子商务.网络入侵和天气预报等领域.这些异 ...
- 使用docker-compose 大杀器来部署服务
使用docker-compose 大杀器来部署服务 上 我们都听过或者用过 docker,然而使用方式却是仅仅用手动的方式,这样去操作 docker 还是很原始. 好吧,可能在小白的眼中噼里啪啦的对着 ...
- DSP已经英雄迟暮了吗?FPGA才是未来的大杀器?
DSP技术,在某些人看来,或者已经面临着英雄迟暮的感觉,就我们当前所知道的.Freesacle.ADI.NXP早就停掉了新技术发展,而当前从大的方面说只剩下TI一家扛着Digital Si ...
随机推荐
- Flyway 学习时遇到的错误
错误一: No plugin found for prefix 'flyway' in the current project and in the plugin groups 找不到Flyway插 ...
- Nginx网站部署
Nginx网站服务部署 常用的网站服务软件 处理静态资源的服务: apache软件:https://apache.org/ nginx软件:https://nginx.org/ 处理动态资源的服务: ...
- 随笔记录 shell脚本相关内容 2019-8-26
字符串截取: 假设变量为var=http://www.hao.com/123.htm1. # 号截取,删除左边字符,保留右边字符.echo ${var#*//}其中 var 是变量名,# 号是运算符, ...
- union 或者 union all 与 order by 的联合使用
首先清楚:多个select 语句 union 时不是简单的将查询结果拼接起来 而是将sql拼接起来编译(做为一个sql语句),然后去执行. 注: union 连接的语句中只会出现一个order by ...
- ps去除元素的三种常用方法
1.仿制图章工具,alt+鼠标左键进行选取复制区域,然后左键点击需要覆盖的区域. 2.套锁工具--选择区域--右键填充--内容识别. 3.修补工具,选中区域--拖动适配. 附带另一份较 ...
- html图片导入画布
首先定义一个画布 canvas id="myCanvas"></canvas> var canvas = document.getElementById('myC ...
- VS 2019企业版激活码
Visual Studio 2019 EnterpriseBF8Y8-GN2QH-T84XB-QVY3B-RC4DF
- thinkphp 输入过滤
永远不要相信客户端提交的数据,所以对于输入数据的过滤势在必行,我们建议: 开启令牌验证避免数据的重复提交: 使用自动验证和自动完成机制进行初步过滤: 使用系统提供的I函数获取用户输入数据: 对不同的应 ...
- js自动下载
常用方法是利用a标签的属性download下载对应文件.图片等 <a href=".." download="...."></a> 但是 ...
- bzoj1010题解
[解题思路] 设s[i]=i+∑c[j](j∈[1,n]∩N) 易得转移方程f[i]=min{f[j]+(s[i]-s[j]-L-1)2},朴素算法复杂度O(n2). 考虑斜率优化:记T[i]=s[i ...