3 subset

3.1 题目  述

一开始你有一个空集,集合可以出现重复元素,然后有 Q 个操作

  1. add s

在集合中加入数字 s。

  1. del s

在集合中删除数字 s。保证 s 存在

  1. cnt s

查询满足 a&s = a 条件的 a 的个数

3.2 输入

第一行一个整数 Q 接下来 Q 行,每一行都是 3 个操作中的一个

3.3 输出

对于每个 cnt 操作输出答案

3.4 Sample Input

7

add 11 cnt 15 add 4 add 0 cnt 6 del 4 cnt 15

3.5 Sample Output

1

2

2

3.6 数据

对于 30% 的数据满足:1 n 1000

对于 100% 的数据满足,1 n 200000 , 0 < s < 216

思路:

分块计算。a[pre][suf],其中 pre < 28,suf < 28,表示前面 8 位是 pre,后面 8 位是 suf 的

子集的数字的个数。

那么对于每个 add 和 del 操作都可以最多 28 时间枚举 suf 更新 a 数组。对于 cnt 操作,最多 28 枚举 pre,计算答案即可时间复杂度 O(n 28)

 var dp:array[..,..]of longint;
s1,s2,n,i,x,j:longint;
ch:string; procedure dfs1(var s1,s2:longint;k,s:longint);
begin
if k> then
begin
inc(dp[s1,s]);
exit;
end;
if s2 and (<<k)> then dfs1(s1,s2,k+,s+(<<k))
else
begin
dfs1(s1,s2,k+,s);
dfs1(s1,s2,k+,s+(<<k));
end;
end; procedure dfs2(var s1,s2:longint;k,s:longint);
begin
if k> then
begin
dec(dp[s1,s]);
exit;
end;
if s2 and (<<k)> then dfs2(s1,s2,k+,s+(<<k))
else
begin
dfs2(s1,s2,k+,s);
dfs2(s1,s2,k+,s+(<<k));
end;
end; procedure add(x:longint);
var i:longint;
begin
s1:=; s2:=;
for i:= downto do
if x and (<<i)> then s1:=s1+<<(i-);
for i:= downto do
if x and (<<i)> then s2:=s2+<<i;
dfs1(s1,s2,,);
end; procedure del(x:longint);
var i:longint;
begin
s1:=; s2:=;
for i:= downto do
if x and (<<i)> then s1:=s1+<<(i-);
for i:= downto do
if x and (<<i)> then s2:=s2+<<i;
dfs2(s1,s2,,);
end; function cnt(x:longint):longint;
var ret,i,s:longint;
begin
ret:=;
s1:=; s2:=;
for i:= downto do
if x and (<<i)> then s1:=s1+<<(i-);
for i:= downto do
if x and (<<i)> then s2:=s2+<<i;
s:=s1;
while s> do
begin
ret:=ret+dp[s,s2];
s:=s1 and (s-);
end;
ret:=ret+dp[,s2];
exit(ret);
end; begin
assign(input,'subset.in'); reset(input);
assign(output,'subset.out'); rewrite(output);
readln(n);
for i:= to n do
begin
readln(ch);
x:=;
for j:= to length(ch) do x:=x*+ord(ch[j])-ord('');
if ch[]='a' then add(x);
if ch[]='d' then del(x);
if ch[]='c' then writeln(cnt(x));
end;
close(input);
close(output);
end.

【NOIP2016练习】T3 subset (分块,状压DP)的更多相关文章

  1. NOIP2016愤怒的小鸟 题解报告 【状压DP】

    题目什么大家都清楚 题解 我们知道,三点确定一条抛物线,现在这条抛物线过原点,所以任意两只猪确定一条抛物线.通过运算的出对于两头猪(x1,y1),(x2,y2),他们所在抛物线a=(y1*x2-y2* ...

  2. [NOIP2016]愤怒的小鸟 D2 T3 状压DP

    [NOIP2016]愤怒的小鸟 D2 T3 Description Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可 ...

  3. Noip2016愤怒的小鸟(状压DP)

    题目描述 题意大概就是坐标系上第一象限上有N只猪,每次可以构造一条经过原点且开口向下的抛物线,抛物线可能会经过某一或某些猪,求使所有猪被至少经过一次的抛物线最少数量. 原题中还有一个特殊指令M,对于正 ...

  4. luogu2831 [NOIp2016]愤怒的小鸟 (状压dp)

    由范围可以想到状压dp 两个点(再加上原点)是可以确定一个抛物线的,除非它们解出来a>=0,在本题中是不合法的 这样的话,我们可以预处理出由任意两个点确定的抛物线所经过的所有的点(要特别规定一下 ...

  5. NOIP2016愤怒的小鸟 [状压dp]

    愤怒的小鸟 题目描述 Kiana 最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于 (0,0) 处,每次 Kiana 可以用它向第一象限发射一只红色的小鸟, ...

  6. [Noip2016]愤怒的小鸟(状压DP)

    题目描述 题意大概就是坐标系上第一象限上有N只猪,每次可以构造一条经过原点且开口向下的抛物线,抛物线可能会经过某一或某些猪,求使所有猪被至少经过一次的抛物线最少数量. 原题中还有一个特殊指令M,对于正 ...

  7. 【NOIP2016】愤怒的小鸟(状压DP)

    题意: Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可以用它向第一象限发射一只红色的小鸟,小鸟们的飞行轨迹均为形如 ...

  8. NOIp2016 愤怒的小鸟 【状压dp】By cellur925

    题目传送门 注:本文中绿鸟==猪! 这道题开始一看数据范围我们就知道是一道状压dp,因为绿鸟仅有18个,但是开始看\(m\)好像没太懂什么意思.既然确定了是状压,那就来设计状态,一般状压的状态肯定是要 ...

  9. NOIP2016提高A组 A题 礼物—概率状压dp

    题目描述 夏川的生日就要到了.作为夏川形式上的男朋友,季堂打算给夏川买一些生 日礼物. 商店里一共有n种礼物.夏川每得到一种礼物,就会获得相应喜悦值Wi(每种礼物的喜悦值不能重复获得). 每次,店员会 ...

  10. [noip2016]愤怒的小鸟<状压dp+暴搜>

    题目链接:https://vijos.org/p/2008 现在回过头去看去年的考试题,发现都不是太难,至少每道题都有头绪了... 这道题的数据范围是18,这么小,直接暴力呗,跑个暴搜就完了,时间也就 ...

随机推荐

  1. redis基础知识学习

    数据结构:1.String 添加: set key value get key getset key value (先get再set) incr key (key对应value原子性递增1) decr ...

  2. 01_13_Struts_默认Action

    01_13_Struts_默认Action 1. 配置struts默认Action <package name="default" namespace="/&quo ...

  3. 利用ss5服务搭建代理服务器

    利用ss5服务搭建代理服务器 1. 下载ss5-3.8.9-8.tar.gz ###官网下载http://ss5.sourceforge.net/ 2. 安装ss5 yum -y install gc ...

  4. python @staticmethod和@classmethod

    Python其实有3个方法,即 静态方法 (staticmethod), 类方法 (classmethod)和 实例方法. 如下: def foo(x): print "executing ...

  5. React入门教程(二)

    前言 距离上次我写 React 入门教程已经快2个月了,年头年尾总是比较忙哈,在React 入门教程(一)我大概介绍了 React 的使用和一些注意事项,这次让我们来继续学习 React 一. Rea ...

  6. [转载] bp神经网络推导

    https://blog.csdn.net/fanxin_i/article/details/80212906 看了这么多就这个推的清楚,转嘞

  7. nginx基本安全优化

    一.调整参数隐藏nginx软件版本号信息 查看nginx版本信息: [root@nginx conf]# curl -I 192.168.200.102 HTTP/1.1 200 OK Server: ...

  8. manjaro18 配置国内镜像源

    1.配置镜像源: sudo pacman-mirrors -i -c China -m rank 2.设置 archlinuxcn 源: sudo nano /etc/pacman.conf 添加以下 ...

  9. 用decimal模块增加python的浮点数精度

    浮点数python默认是17位精度,也就是小数点后16位(16位以后的全部四舍五入了),虽然有16位,但是这个精度越往后越不准. 如果有特殊需求,需要更多的精度,可以用decimal模块,通过更改其里 ...

  10. Linux之crond 服务介绍

    在介绍crond之前,先科普一下什么是进程?什么是线程?什么是程序? 程序:程序是一组指令及参数的集合,指令按照既定的逻辑控制计算机运行.进程则是运行着的程序,是操作系统执行的基本单位.线程则是为了节 ...