HDU5716, HDU5745【dp+bitset】
DP+bitset
HDU5716
dp[i][j] = dp[i-1][j-1] && (s[i] in set[j]); 第二维压bitset
#include <bits/stdc++.h>
#define X first
#define Y second
#define mp make_pair
#define pii pair<int, int>
#define gg puts("gg");
using namespace std;
const int N = 2e6+;
int id(char c){
if(c >= ''&& c <= '') return c-'';
if(c >= 'a'&& c <= 'z') return c-'a'+;
if(c >= 'A'&& c <= 'Z') return c-'A'+;
return -;
}
char s[N], t[];
bitset<> se[], dp;
int main(){
while(gets(s+)){
for(int i = ; i < ; i++) se[i].reset();
dp.reset();
int m, n; scanf("%d", &n);
for(int i = ; i <= n; i++){
scanf("%d", &m);
scanf(" %s", t);
for(int j = ; t[j]; j++)
se[ id(t[j]) ].set(i);
}
dp.set();
bool tag = true;
for(int i = ; s[i]; i++){
if(id(s[i]) >= )
dp = (dp<<)&se[ id(s[i]) ];
else
dp.reset();
dp.set();
if(dp.test(n))
tag = false, printf("%d\n", i-n+);
}
if(tag) puts("NULL");
getchar();
}
return ;
}
HDU5745
dp[i][j] = (dp[i-1][j-1]&&s1[i] == s2[j])|(dp[i-2][j-2]&&s1[i] == s2[j-1]&&s1[i-1] == s2[j])
压小的一维T了,压大的一维可以AC.
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 1e5+;
char s1[N], s2[];
bitset<N> se[], dp[];
int main(){
int t; scanf("%d", &t);
while(t--){
int n, m;
scanf("%d%d", &n, &m);
scanf("%s%s", s1+, s2+);
int l1 = strlen(s1+), l2 = strlen(s2+);
for(int i = ; i < ; i++){
se[i].reset();
for(int j = ; j <= l1; j++)
se[i][j] = (s1[j] == 'a'+i);
}
//se[i][j]: s1的第j个字符是不是i
dp[].set();
for(int i = ; i <= l2; i++){
dp[i%] = (dp[(i+)%]<<)&se[s2[i]-'a'];
if(i >= )
dp[i%] |= (dp[(i+)%]<<)&se[s2[i-]-'a']&(se[s2[i]-'a']<<);
dp[i%][] = ;
}
for(int i = l2; i <= l1; i++)
printf("%d", dp[l2%][i] == );
for(int i = ; i < l2; i++) putchar('');
puts("");
}
return ;
}
HDU5716, HDU5745【dp+bitset】的更多相关文章
- 【dp专题】NOIP真题-DP专题练习
这里学习一下DP的正确姿势. 也为了ZJOI2019去水一下做一些准备 题解就随便写写啦. 后续还是会有专题练习和综合练习的. P1005 矩阵取数游戏 给出$n \times m$矩阵每次在每一行取 ...
- [ZPG TEST 118] 最大值【dp+离线】
题4 最大值(findmax) [题目描述] 找到一个数组的最大值的一种方法是从数组开头从前到后对数组进行扫描,令max=a[0](数组下表从0..N-1),如果a[i]>max,就更新max ...
- 【8.14校内测试】【DP专题】
nlogn做法,dp[i]表示当前长度为i的最长上升子序列末尾元素的值. 不会写lower_bound(qwq,贴一个以前的好看点的代码 #include<iostream>//使用low ...
- uva 10069 Distinct Subsequences 【dp+大数】
题目:uva 10069 Distinct Subsequences 题意:给出一个子串 x 和母串 s .求子串在母串中的不同序列的个数? 分析:定义dp[i][j]:x 的前 i 个字母在 s 的 ...
- ZOJ 2972 Hurdles of 110m 【DP 背包】
一共有N段过程,每段过程里可以选择 快速跑. 匀速跑 和 慢速跑 对于快速跑会消耗F1 的能量, 慢速跑会集聚F2的能量 选手一开始有M的能量,即能量上限 求通过全程的最短时间 定义DP[i][j] ...
- CodeForces 189A 166E 【DP ·水】
非常感谢 Potaty 大大的援助使得我最后A出了这两题DP ================================== 189A : 求切分后的ribbon最多的数目,不过要求切分后只能存 ...
- 【DP专辑】ACM动态规划总结
转载请注明出处,谢谢. http://blog.csdn.net/cc_again?viewmode=list ---------- Accagain 2014年5月15日 ...
- hdu 1025 Constructing Roads In JGShining’s Kingdom 【dp+二分法】
主题链接:pid=1025">http://acm.acmcoder.com/showproblem.php?pid=1025 题意:本求最长公共子序列.但数据太多. 转化为求最长不下 ...
- 愤怒的小鸟【$DP$优化】
卡常的状压\(DP\),愤怒的小鸟. 其实本来是个很水的状压\(DP\),但因为最后三个点\(n=18\),成功地把我的不可能达到的下界为\(\Omega(2^nn^2)\),紧确的上界为\(O(2^ ...
随机推荐
- [ios][swift]Swift - 常用文件目录路径获取(Home目录,文档目录,缓存目录等)
自己写的不一定是最好的! 轮子:http://www.hangge.com/blog/cache/detail_765.html
- bzoj 1588营业额统计(HNOI 2002)
http://www.lydsy.com/JudgeOnline/problem.php?id=1588 splay bottom-up的数组实现. 题意就是给你一组数,求每个数与在其前面且与其最相 ...
- Counterfeit Dollar 分类: POJ 2015-06-12 15:28 19人阅读 评论(0) 收藏
Counterfeit Dollar Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 41559 Accepted: 13 ...
- winform中拖动功能实现技巧
实现的需求,我通过拖动选中的用户行放到左边的机构节点上,从而实现用户改变组织机构的关系 贴代码 private DataGridViewSelectedRowCollection sourceRowC ...
- A fatal error has been detected by the Java Runtime Environment(jdk 1.6的一个BUG)
几天做项目,生成一堆注解的实体,当实体数超过86个时,jvm报错: # # A fatal error has been detected by the Java Runtime Environmen ...
- GetLastInputInfo计时用户离开电脑及软件在指定时间锁定等(转)
/************************************************************************/ /* 说明: 调用函数GetLastInputIn ...
- C#获取当前日期时间(转)
我们可以通过使用DataTime这个类来获取当前的时间.通过调用类中的各种方法我们可以获取不同的时间:如:日期(2008-09-04).时间(12:12:12).日期+时间(2008-09-04 12 ...
- 【leetcode❤python】27. Remove Element
#-*- coding: UTF-8 -*- class Solution(object): def removeElement(self, nums, val): "& ...
- 04-23 Android 课堂笔记
1.调用 //暂停 @Override protected void onPause() { super.onPause(); Log.e("TAG", "onPause ...
- vim 跳到指定行
在编辑模式下输入 ngg 或者 nG n为指定的行数(如25) 25gg或者25G 跳转到第25行. 在命令模式下输入行号n : n 如果想打开文件即跳转 vim +n FileName 查看当然光标 ...