其实并不怎么会用,有一次有位学长提到了这个名字,就这么取题目了。

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的更多相关文章

  1. 使用docker-compose 大杀器来部署服务 上

    使用docker-compose 大杀器来部署服务 上 我们都听过或者用过 docker,然而使用方式却是仅仅用手动的方式,这样去操作 docker 还是很原始. 好吧,可能在小白的眼中噼里啪啦的对着 ...

  2. 使用docker-compose 大杀器来部署服务 上(转)

    使用docker-compose 大杀器来部署服务 上 我们都听过或者用过 docker,然而使用方式却是仅仅用手动的方式,这样去操作 docker 还是很原始. 好吧,可能在小白的眼中噼里啪啦的对着 ...

  3. Postgresql-模糊匹配大杀器

    # Postgresql-模糊匹配大杀器 ## 问题背景 随着pg越来越强大,abase目前已经升级到5.0(postgresql10.4),目前abase5.0继承了全文检索插件(zhparser) ...

  4. [NewLife.XCode]反向工程(自动建表建库大杀器)

    NewLife.XCode是一个有10多年历史的开源数据中间件,支持nfx/netstandard,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode. 整个系列教程会大量结合示 ...

  5. 一文读懂机器学习大杀器XGBoost原理

    http://blog.itpub.net/31542119/viewspace-2199549/ XGBoost是boosting算法的其中一种.Boosting算法的思想是将许多弱分类器集成在一起 ...

  6. [转]使用docker-compose 大杀器来部署服务 上

    本文转自:https://www.cnblogs.com/neptunemoon/p/6512121.html 使用docker-compose 大杀器来部署服务 上 我们都听过或者用过 docker ...

  7. 离群点检测与序列数据异常检测以及异常检测大杀器-iForest

    1. 异常检测简介 异常检测,它的任务是发现与大部分其他对象不同的对象,我们称为异常对象.异常检测算法已经广泛应用于电信.互联网和信用卡的诈骗检测.贷款审批.电子商务.网络入侵和天气预报等领域.这些异 ...

  8. 使用docker-compose 大杀器来部署服务

    使用docker-compose 大杀器来部署服务 上 我们都听过或者用过 docker,然而使用方式却是仅仅用手动的方式,这样去操作 docker 还是很原始. 好吧,可能在小白的眼中噼里啪啦的对着 ...

  9. DSP已经英雄迟暮了吗?FPGA才是未来的大杀器?

          DSP技术,在某些人看来,或者已经面临着英雄迟暮的感觉,就我们当前所知道的.Freesacle.ADI.NXP早就停掉了新技术发展,而当前从大的方面说只剩下TI一家扛着Digital Si ...

随机推荐

  1. AWS lambda DynamoDB api gateway之间的连接

    创建角色 附加策略 AmazonDynamoDBFullAccess AWSLambdaDynamoDBExecutionRole 创建DynamoDB表 在表的项目中创建内容 this pipi 打 ...

  2. pandas-索引

    一.按列取.按索引/行取.按特定行取 import numpy as np from pandas import DataFrame import pandas as pd df=DataFrame( ...

  3. leetcode-685-冗余连接②

    题目描述: 参考后提交:并查集: class Solution: def findRedundantDirectedConnection(self, edges: List[List[int]]) - ...

  4. nextJS使用注意事项

    项目参考 nextJs-yicha 1. 采用方案 create-next-app.antd (1)安装 npx create-next-app --example with-ant-design m ...

  5. JavaScript中的函数柯里化与反柯里化

    一.柯里化定义 在计算机科学中,柯里化是把 接受多个参数的函数 变换成 接受一个单一参数(最初函数的第一个参数)的函数 并且返回 接受余下参数且返回结果的新函数的技术 高阶函数 高阶函数是实现柯里化的 ...

  6. Jboss集群(五)--F5硬件负载均衡器双击热备 + Jboss集群终极实现

    BIG/IP利用定义在其上面的虚拟IP地址来为用户的一个或多个应用服务器提供服务.因此,它能够为大量的基于TCP/IP的网络应用提供服务器负载均衡服务.BIG/IP连续地对目标服务器进行L4到L7合理 ...

  7. Python对象继承set类型

    Python对象继承set类型 class Feature(set): def __init__(self): set.__init__(self) # 这里演示将Feature类的加号重载成set. ...

  8. sublime 分屏 实现代码整体前后移

    view->layout->column2 或者快捷键 command+alt+n (mac) "Tab"键整体后移,"Shift+Tab"整体前移

  9. Python 爬虫-抓取小说《盗墓笔记-怒海潜沙》

    最近想看盗墓笔记,看了一下网页代码,竟然不是js防爬虫,那就用简单的代码爬下了一节: """ 爬取盗墓笔记小说-七星鲁王宫 """ from ...

  10. NtOpenProcess被HOOK,跳回原函数地址后仍然无法看到进程

    点击打开链接http://www.ghoffice.com/bbs/read-htm-tid-103923.html