【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,这么小,直接暴力呗,跑个暴搜就完了,时间也就 ...
随机推荐
- Tomcat详细安装配置
1.首先是Tomcat的获取和安装. 获取当然得上Apache的官方网站下载,开源免费,而且带宽也足够.下载会很快. 这是两种不同的下载,一个是普通安装版本,一个是解压安装版本.使用起来是一样的,只是 ...
- JVM内存模型与GC算法(简介)
JVM内存模型如上图,需要声明一点,这是<Java虚拟机规范(Java SE 7版)>规定的内容,实际区域由各JVM自己实现,所以可能略有不同.以下对各区域进行简短说明. 1.1程序计数器 ...
- data命令详解
Linux date命令的用法 在linux shell编程中,经常用到日期的加减运算 以前都是自己通过expr函数计算,很麻烦 其实date命令本身提供了日期的加减运算 非常方便.例如:得到昨天的时 ...
- Find the Longest Word in a String-freecodecamp算法题目
Find the Longest Word in a String(找出最长单词) 要求 在句子中找出最长的单词,并返回它的长度 函数的返回值应该是一个数字. 思路 用.split(' ')将句子分隔 ...
- python特殊字符转义符号表示
- 9-11.Yii2.0框架控制器分配视图并传参xss攻击脚本视图的过滤
目录 一维数组传参 新建控制器: 新建view模板 二维数组传参 新建控制器: 新建view模板 视图非法字符的过滤 新建控制器: 新建view模板 一维数组传参 新建控制器: D:\xampp\ht ...
- jQuery ui 百叶窗blind方向设置
百叶窗特效(Blind Effect)参数direction设置 $( document ).click(function() { $( "#toggle" ).toggle( & ...
- luogu2774 方格取数问题
最大点权独立集,参见胡伯涛论文 #include <iostream> #include <cstring> #include <cstdio> #include ...
- socketcluster 客户端请求
<html> <head> <title>test</title> <script src="https://cdn.bootcss.c ...
- quarz spring boot
package com.pkfare.task.manage.config; import org.quartz.spi.TriggerFiredBundle; import org.springfr ...