【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,这么小,直接暴力呗,跑个暴搜就完了,时间也就 ...
随机推荐
- d3.js--04(enter和exit)
enter() 当DOM数量少于data的数量,或者压根一个都没有的时候,我们一般会希望让程序帮忙创建. <!DOCTYPE html> <html> <head> ...
- 对象、句柄、ID之间的区别
对象是C++的概念,C++的类对象 句柄是Windows SDK的概念,指向某种资源的一种“指针”(有时候底层不一定是指针) 资源ID在MFC里仅仅是一个宏,也就是个整数. 其实,句柄是控件在数据结构 ...
- STL之map操作[转]
转自https://www.cnblogs.com/yutongzhu/p/5884269.html 作者彼得朱 map 是一种有序无重复的关联容器. 关联容器与顺序容器不同,他们的元素是按照关键字来 ...
- 【费用流】bzoj1834: [ZJOI2010]network 网络扩容
还是稍微记一下这个拆点模型吧 Description 给定一张有向图,每条边都有一个容量C和一个扩容费用W.这里扩容费用是指将容量扩大1所需的费用. 求: 1.在不扩容的情况下,1到N的最大流: ...
- mysql 在线添加字段
使用工具pt-online-schema-change #! /bin/bash stime=`date +%s` echo "增加字段开始测试时间为:`date +%H:%M:%S`&qu ...
- Install GStreamer on Ubuntu
apt-get install libgstreamer1.0-0 gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-p ...
- Django之URL
URL是用户请求路径与views视图处理函数的一个映射 简单的路由配置及实现 这里是pycharm编辑开发为例,新建的django项目,会在url.py下自动生成这样一段代码: from django ...
- 水题:UVa213- Message Decoding
Message Decoding Some message encoding schemes require that an encoded message be sent in two parts. ...
- [POJ 1001] Exponentiation C++解题报告 JAVA解题报告
Exponentiation Time Limit: 500MS Memory Limit: 10000K Total Submissions: 126980 Accepted: 30 ...
- python 查看异常
接触python 一直觉着编译后报错经常没能捕捉显示,每次也只能从头看到尾 恰好在水木社区中看到关于异常捕捉帖子 方法一:捕获所有异常 try: a=b b=c except Exception,ex ...