【2016多校】T3 subset(分块,DP)

 1 var dp:array[0..300,0..300]of longint;
 2     s1,s2,n,i,x,j:longint;
 3     ch:string;
 4
 5 procedure dfs1(var s1,s2:longint;k,s:longint);
 6 begin
 7  if k>7 then
 8  begin
 9   inc(dp[s1,s]);
10   exit;
11  end;
12  if s2 and (1<<k)>0 then dfs1(s1,s2,k+1,s+(1<<k))
13   else
14   begin
15    dfs1(s1,s2,k+1,s);
16    dfs1(s1,s2,k+1,s+(1<<k));
17   end;
18 end;
19
20 procedure dfs2(var s1,s2:longint;k,s:longint);
21 begin
22  if k>7 then
23  begin
24   dec(dp[s1,s]);
25   exit;
26  end;
27  if s2 and (1<<k)>0 then dfs2(s1,s2,k+1,s+(1<<k))
28   else
29   begin
30    dfs2(s1,s2,k+1,s);
31    dfs2(s1,s2,k+1,s+(1<<k));
32   end;
33 end;
34
35 procedure add(x:longint);
36 var i:longint;
37 begin
38  s1:=0; s2:=0;
39  for i:=15 downto 8 do
40   if x and (1<<i)>0 then s1:=s1+1<<(i-8);
41   for i:=7 downto 0 do
42    if x and (1<<i)>0 then s2:=s2+1<<i;
43  dfs1(s1,s2,0,0);
44 end;
45
46 procedure del(x:longint);
47 var i:longint;
48 begin
49  s1:=0; s2:=0;
50  for i:=15 downto 8 do
51   if x and (1<<i)>0 then s1:=s1+1<<(i-8);
52   for i:=7 downto 0 do
53    if x and (1<<i)>0 then s2:=s2+1<<i;
54  dfs2(s1,s2,0,0);
55 end;
56
57 function cnt(x:longint):longint;
58 var ret,i,s:longint;
59 begin
60  ret:=0;
61  s1:=0; s2:=0;
62  for i:=15 downto 8 do
63   if x and (1<<i)>0 then s1:=s1+1<<(i-8);
64  for i:=7 downto 0 do
65   if x and (1<<i)>0 then s2:=s2+1<<i;
66  s:=s1;
67  while s>0 do
68  begin
69   ret:=ret+dp[s,s2];
70   s:=s1 and (s-1);
71  end;
72  ret:=ret+dp[0,s2];
73  exit(ret);
74 end;
75
76 begin
77  assign(input,‘subset.in‘); reset(input);
78  assign(output,‘subset.out‘); rewrite(output);
79  readln(n);
80  for i:=1 to n do
81  begin
82   readln(ch);
83   x:=0;
84   for j:=5 to length(ch) do x:=x*10+ord(ch[j])-ord(‘0‘);
85   if ch[1]=‘a‘ then add(x);
86   if ch[1]=‘d‘ then del(x);
87   if ch[1]=‘c‘ then writeln(cnt(x));
88  end;
89  close(input);
90  close(output);
91 end.
时间: 2024-10-12 17:30:47

【2016多校】T3 subset(分块,DP)的相关文章

多校第七场 DP+map模拟

HDU 4939 Stupid Tower Defense DP 推一下. #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<map> #include<queue> #include<stack> #include<vector> #include<ctype.h> #include<

2016 华科校赛 B. And

// 2016 华科校赛 B. And http://acm.hust.edu.cn/problem/show/1672 题目描述 给出 a[1], ..., a[n].查询 t[1], ... t[m],问有多少 a[] 的子序列的按位与是 t[]. 输入 多组测试,EOF 结束. n a[] m t[] 1 ≤ n ≤ 1e6 1 ≤ m ≤ (1 << 20) 1 ≤ a[i] ≤ (1 << 20) 1 ≤ t[i] ≤ (1 << 20) 输出 输出一行,每组

【2016多校】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

【2016多校】T3 质数 (分块,想法题)

题意:共有N盏灯,标号为1到N,有M个标有不同质数的开关,开关可以控制所有标号为其标号倍数的灯,按一次开关,所有其控制的灭着的灯都点亮,所有其控制的亮着的灯将熄灭.现在,宿管可以无限的按所有开关,所有灯初始状态为熄灭,请求出最多能点亮几盏灯. 对于100%的数据,T<=10,N<=1000. 所有标号不相等,M≤N以内的质数总个数. 思路:分块,将<=sqrt(n)的质数分成一份共有N1个,另一份共有N2个. 对于第一部分因为n<=1000则N1<=11,可以用暴力枚举+标记

2016多校第4场 HDU 6076 Security Check DP,思维

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6076 题意:现要检查两条队伍,有两种方式,一种是从两条队伍中任选一条检查一个人,第二种是在每条队伍中同时各检查一个,前提是两条队伍中的两个人的序号大于k.然后询问检查最少需要的时间. 解法:根据题意很容易想到dp[i][j]表示第一个队伍已经检查完前i个人,第二个人已经检查完前j个人所需最小时间.但是这样是O(n^2)毫无疑问会tle.我们发现k很小,所以我们可以对于两种转移方式分开处理.对于差值小

【2016多校】T2 forest (树形DP,数论)

题意:有一棵N个点的树,每个点上有点权 定义路径长度为所经过的所有点的点权之和,树的直径为一棵树中最大的路径长度 有N次询问,每次询问要求回答所有树的直径之积 每次询问后会删一条边,树的数量会+1 要求回答N次询问,答案 mod 10^9+7 n<=100000 思路:因为知道每次删哪条边所以可以离线倒着做,每次加一条边 加边会使两棵树合并,考虑树的合并 已知原树的形状,可知点之间的父子关系 考虑DP,设dp[u,1],dp[u,2]为以U为根,子树中路径的最长与次长值,同时记录从哪个儿子取到

HDU 6092 17多校5 Rikka with Subset(dp+思维)

Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situation, so he gives Rikka some math tasks to practice. There is one of them: Yuta has n positive A1−An and their sum is m. Then for each subset S of A, Yuta calcula

2016 SCNUCPC 校赛非官方题解

我要举报本次校赛出题人的消极出题!!! A. 树链剖分数据结构板题 B. The background of water problem 题目大意(大写加粗的水题):给定$N$个学生和他们$K$个科目的成绩$S_i$,再给出各科目$K_i$的权重顺序$Q_i$,求排名之后,拥有id为$X$的是哪个学生. 基本思路:虽然$K$只有$10$,$S$只有$100$,但有M组查询,所以当然不能开个long long去hash每个学生.我们简单点,开个结构体,排个序,就好了. 参考代码: 官方代码(将成绩

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

[NOIP2016]愤怒的小鸟 D2 T3 Description Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可以用它向第一象限发射一只红色的小鸟,小鸟们的飞行轨迹均为形如y=ax2+bx的曲线,其中a,b是Kiana指定的参数,且必须满足a<0. 当小鸟落回地面(即x轴)时,它就会瞬间消失. 在游戏的某个关卡里,平面的第一象限中有n只绿色的小猪,其中第i只小猪所在的坐标为(xi,yi). 如果某只小鸟的飞行