大杀器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 ...
随机推荐
- easyui 弹出框调用外部js函数 提示“Microsoft JScript 运行时错误: 缺少对象”
昨天遇见一个很诡异的问题 我用easyui做了一个网站,其中有一个a页面和一个b页面,我通过easyui的window功能,在a页面中弹出了一个b页面,在b页面中,我用到了一个外部js的函数c,我在b ...
- 1.Struts2快速入门
Struts2是一个基于MVC设计模式的Web层框架 Web层框架的特点:前端控制器模式 快速入门 1.下载Struts2的框架包 https://struts.apache.org/ 2.导入jar ...
- Kotlin Doc
{ https://www.runoob.com/kotlin/kotlin-eclipse-setup.html }
- Struts功能详解——ActionForm
ActionForm ActionForm用于封装用户的请求参数,而请求参数是通过JSP页面的表单域传递过来的.因此应保证ActionForm的参数,与表单域的名字相同. ActionForm ...
- 绘制delphi窗体的标题栏
绘制delphi窗体的标题栏 按照设计,Delphi窗体的“标题”属性是由Windows负责绘制,标题栏在系统菜单旁边.如果你不想改变窗体的标题属性又想在窗体的标题栏添加一些自己的内容,你需要处理一个 ...
- NX二次开发-获取WCS标识UF_CSYS_ask_wcs
NX9+VS2012 #include <uf.h> #include <uf_csys.h> UF_initialize(); //获取WCS标识 tag_t WcsId = ...
- (转)Java 标注(Annotation)详解
转:http://blog.csdn.net/nbrremix/article/details/7337274 元数据的作用 如果要对于元数据的作用进行分类,目前还没有明确的定义,不过我们可以根据它所 ...
- opencv-图像形态学之开运算、闭运算、形态学梯度、顶帽、黑帽合辑
转自:https://blog.csdn.net/poem_qianmo/article/details/24599073 1.1 开运算(Opening Operation) 开运算(Opening ...
- 开发中运行mysql脚本,发现提示mysql提示Column count doesn't match value count at row 1错误
开发中运行mysql脚本,发现提示mysql提示Column count doesn't match value count at row 1错误, 调试后发现是由于写的SQL语句里列的数目和后面的值 ...
- 绿色版mysql 免安装使用(转载)
MySQL绿色版的安装(mysql-5.6.22-win32.zip) Posted on 2015-01-31 23:21 卒子 阅读(10739) 评论(2) 编辑 收藏 由于工作需要最近要开始研 ...