【NOIP2016练习】T3 subset (分块,状压DP)
3 subset
3.1 题目 述
一开始你有一个空集,集合可以出现重复元素,然后有 Q 个操作
- add s
在集合中加入数字 s。
- del s
在集合中删除数字 s。保证 s 存在
- 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)的更多相关文章
- NOIP2016愤怒的小鸟 题解报告 【状压DP】
题目什么大家都清楚 题解 我们知道,三点确定一条抛物线,现在这条抛物线过原点,所以任意两只猪确定一条抛物线.通过运算的出对于两头猪(x1,y1),(x2,y2),他们所在抛物线a=(y1*x2-y2* ...
- [NOIP2016]愤怒的小鸟 D2 T3 状压DP
[NOIP2016]愤怒的小鸟 D2 T3 Description Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可 ...
- Noip2016愤怒的小鸟(状压DP)
题目描述 题意大概就是坐标系上第一象限上有N只猪,每次可以构造一条经过原点且开口向下的抛物线,抛物线可能会经过某一或某些猪,求使所有猪被至少经过一次的抛物线最少数量. 原题中还有一个特殊指令M,对于正 ...
- luogu2831 [NOIp2016]愤怒的小鸟 (状压dp)
由范围可以想到状压dp 两个点(再加上原点)是可以确定一个抛物线的,除非它们解出来a>=0,在本题中是不合法的 这样的话,我们可以预处理出由任意两个点确定的抛物线所经过的所有的点(要特别规定一下 ...
- NOIP2016愤怒的小鸟 [状压dp]
愤怒的小鸟 题目描述 Kiana 最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于 (0,0) 处,每次 Kiana 可以用它向第一象限发射一只红色的小鸟, ...
- [Noip2016]愤怒的小鸟(状压DP)
题目描述 题意大概就是坐标系上第一象限上有N只猪,每次可以构造一条经过原点且开口向下的抛物线,抛物线可能会经过某一或某些猪,求使所有猪被至少经过一次的抛物线最少数量. 原题中还有一个特殊指令M,对于正 ...
- 【NOIP2016】愤怒的小鸟(状压DP)
题意: Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可以用它向第一象限发射一只红色的小鸟,小鸟们的飞行轨迹均为形如 ...
- NOIp2016 愤怒的小鸟 【状压dp】By cellur925
题目传送门 注:本文中绿鸟==猪! 这道题开始一看数据范围我们就知道是一道状压dp,因为绿鸟仅有18个,但是开始看\(m\)好像没太懂什么意思.既然确定了是状压,那就来设计状态,一般状压的状态肯定是要 ...
- NOIP2016提高A组 A题 礼物—概率状压dp
题目描述 夏川的生日就要到了.作为夏川形式上的男朋友,季堂打算给夏川买一些生 日礼物. 商店里一共有n种礼物.夏川每得到一种礼物,就会获得相应喜悦值Wi(每种礼物的喜悦值不能重复获得). 每次,店员会 ...
- [noip2016]愤怒的小鸟<状压dp+暴搜>
题目链接:https://vijos.org/p/2008 现在回过头去看去年的考试题,发现都不是太难,至少每道题都有头绪了... 这道题的数据范围是18,这么小,直接暴力呗,跑个暴搜就完了,时间也就 ...
随机推荐
- Codeforces Round 513 (Div.1+Div.2)
比赛传送门 10月4号的比赛,因为各种原因(主要是懒),今天才写总结-- Div1+Div2,只做出两个题+迟到\(20min\),日常掉\(rating\)-- \(\rm{A.Phone\;Num ...
- 01_1_准备ibatis环境
01_1_准备ibatis环境 1. 搭建环境:导入相关的jar包 mysql-connector-java-5.1.5-bin.jar(mysql)或者ojdbc6.jar(oracle).ibat ...
- matlplotlib绘图(二)
matplotlib基础知识 matpltlib中的基本图表包括的元素 1.x轴和y轴:水平和垂直的轴线 2.x轴和y轴的刻度:刻度标识坐标值的分隔,包括最小刻度和最大刻度 3.x轴和y轴刻度:表示特 ...
- Robot Framework user guide
http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html
- memcache 协议 && Golang实现
https://github.com/quguolin/memcache 一:Error ERROR\r\n 客户端发送了一个不存在的命令 CLIENT_ERROR\r\n 客户端发送了一个不符合协议 ...
- 01 Django基础知识
相关概念 软件框架 一个公司是由公司中的各部部门来组成的,每一个部门拥有特定的职能,部门与部门之间通过相互的配合来完成让公司运转起来. 一个软件框架是由其中各个软件模块组成的,每一个模块都有特定的功能 ...
- 搭建本地虚拟服务器linux(CentOS 7)的python虚拟环境(Hyper-V演示)
新建虚拟机->安装CentOS7->新建虚拟交换机:内部网络->CentOS7设置->网络适配器:虚拟交换机:新建虚拟交换机->进入CentOS # cd /etc/sy ...
- python2和python3,字典和json
Python2的标准数据类型有: Numbers (数字) String (字符串) List (列表) Tuple (元组) Dictionary (字典) Python3的标准数据类型有: Num ...
- proc_info_list
内核中每种处理器架构抽象为一个proc_info_list结构体,在arch/arm/include/asm/procinfo.h中定义, struct proc_info_list { unsign ...
- C语言结构体初始化的四种方法(转载)
原文:https://blog.csdn.net/ericbar/article/details/79567108 定义 struct InitMember { int first: double s ...