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

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. 类 __init__的注意事项

    class Dog():  class类 后面的ClassName类名第一个字母一定要大写. def __init__(self,name,age):    注意init前后是英文格式下,前后都是两道 ...

  2. dev 中 字符串转中文拼音缩写,对grid列表进行模糊匹配,grid获取焦点行,gridlookupedit控件用拼音模糊匹配下拉选项

    番外篇:. //该方法是将字符串转化为中文拼音的首写字母大写, public static string RemoveSpecialCharacters(string str){try{if (str ...

  3. 3.Struts2中Action类的三种写法

    一.普通的POJO类(没有继承没有实现)-基本不使用 public class DemoAction1 { public String execute(){ System.out.println(&q ...

  4. 小程序学习三 一切的开始app() 小程序的注册

    现在打开 app.js //app.js App({ onLaunch(options) { //小程序初始化 // console.log("小程序初始化", options) ...

  5. eclipse 上Svn将项目从分支合并到主干的方法

    eclipse svn 分支合并到主干   最近公司产品上线,整个系统架构包含有七八个子系统,并且子系统都是集群部署.所以每次升级维护都要确保尽可能不出问题.因为整个系统刚上线不久,意味着新系统不定期 ...

  6. NX二次开发-获取工程图尺寸的值UF_DRF_ask_dim_info

    UF_initialize(); //遍历所有尺寸 ; tag_t DimTag = NULL_TAG; UF_OBJ_cycle_objs_in_part1(UF_PART_ask_display_ ...

  7. ionic-CSS:ionic 表单和输入框

    ylbtech-ionic-CSS:ionic 表单和输入框 1.返回顶部 1. ionic 表单和输入框 list 类同样可以用于 input 元素.item-input 和 item 类指定了文本 ...

  8. JSP/Servlet笔记

    一.Servlet简介 Servlet程序可以运行于任何服务器,如web.email.FTP等,所有servlet程序必须实现javax.servlet接口.GenericServlet是实现了jav ...

  9. __attribute__ (( __cleanup__))

    一.简单说明: cleanup作为__attribute__属性中的一个可选属性值 其作用是当其声明的变量离开了其生命周期,那么 会自动调用你所指定的销毁函数 二.例子: #include <s ...

  10. Flink 1.6.0 Windows操作

    原文连接 https://ci.apache.org/projects/flink/flink-docs-release-1.6/dev/stream/operators/windows.html W ...