BZOJ 4032 trie树+各种乱搞
思路 :
先对b 的所有后缀建立trie树
第一问
暴力枚举a串的起点
在trie树上跑 找到最短的
第二问
也是暴力枚举a串的起点
a和b顺着暴力匹配就好
第三问
求出来a在第i个位置 加一个字母j 能够到的最近的位置 f[i][j] 到最后就是inf
从f[0][j]DFS 在trie上跟着跑找到最小的deep更新答案
第四问
先按照求f一样同理求出b串 的 g
dp[i][j]表示a的前i个位置 b不得不匹配到b的第j个位置
dp[i+1][j]=min(dp[i+1][j],dp[i][j]), dp[i+1][g[j][a[i]]]=min(dp[i+1][g[j][a[i]]],dp[i][j]+1);//By SiriusRen
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N=,inf=;
int ch[N*N/][],f[N][],g[N][],dp[N][N],cnt,ans1,ans2,ans3,ans4,vis[];
void insert(char *a){
int now=;
for(int i=;a[i];i++){
if(!ch[now][a[i]])ch[now][a[i]]=++cnt;
now=ch[now][a[i]];
}
}
int solve1(char *a){
int now=,i;
for(i=;a[i];i++){
if(!ch[now][a[i]])return i+;
else now=ch[now][a[i]];
}return inf;
}
void solve3(int x,int now,int deep){
if(x==inf)return;
if(!now&&deep){ans3=min(ans3,deep);return;}
for(int i=;i<=;i++)solve3(f[x][i],ch[now][i],deep+);
}
char a[N],b[N];
int main(){
scanf("%s%s",a+,b+);
int n1=strlen(a+),n2=strlen(b+);
for(int i=;i<=n1;i++)a[i]=a[i]-'a'+;
for(int i=;i<=n2;i++)b[i]=b[i]-'a'+;
for(int i=;i<=n2;i++)insert(b+i);
ans1=ans2=ans3=ans4=inf;
for(int i=;i<=n1;i++)ans1=min(ans1,solve1(a+i));
for(int i=;i<=n1;i++){
int now=;
for(int j=;i+j<=n1;now++,j++){
while(a[i+j]!=b[now]&&now<=n2)now++;
if(now>n2){ans2=min(ans2,j+);break;}
}
}
for(int i=;i<=n1;i++){
memset(vis,,sizeof(vis));
for(int j=i+;j<=n1;j++)if(!vis[a[j]])vis[a[j]]=j;
for(int j=;j<=;j++)f[i][j]=vis[j]?vis[j]:inf;
}solve3(,,);
for(int i=;i<=n2;i++){
memset(vis,,sizeof(vis));
for(int j=i+;j<=n2;j++)if(!vis[b[j]])vis[b[j]]=j;
for(int j=;j<=;j++)g[i][j]=vis[j]?vis[j]:inf;
}
memset(dp,0x3f,sizeof(dp)),dp[][]=;
for(int i=;i<=n1;i++)
for(int j=;j<=n2;j++)
dp[i+][j]=min(dp[i+][j],dp[i][j]),
dp[i+][g[j][a[i]]]=min(dp[i+][g[j][a[i]]],dp[i][j]+);
for(int i=;i<=n1+;i++)ans4=min(ans4,dp[i][inf]);
printf("%d\n%d\n%d\n%d\n",ans1==inf?-:ans1,ans2==inf?-:ans2,ans3==inf?-:ans3,ans4==inf?-:ans4);
}
BZOJ 4032 trie树+各种乱搞的更多相关文章
- BZOJ-3225 立方体覆盖 线段树+扫描线+乱搞
看数据范围像是个暴力,而且理论复杂度似乎可行,然后被卡了两个点...然后来了个乱搞的线段树+扫描线.. 3225: [Sdoi2008]立方体覆盖 Time Limit: 2 Sec Memory L ...
- [NOIP2018]:旅行(数据加强版)(基环树+搜索+乱搞)
题目描述 小$Y$是一个爱好旅行的$OIer$.她来到$X$国,打算将各个城市都玩一遍.小$Y$了解到,$X$国的$n$个城市之间有$m$条双向道路.每条双向道路连接两个城市.不存在两条连接同一对城市 ...
- BZOJ 4260 trie树
思路: 搞一个前缀异或和 一次从左往右 另一次从右往左 异或最大值 用字典树搞一搞 //By SiriusRen #include <cstdio> #include <cstrin ...
- BZOJ 2251 Trie树
思路: i~n加到Trie树里 经过的边权+1 DFS一遍 搞定~ //By SiriusRen #include <cstdio> #include <cstring> #i ...
- [luoguP2325] [SCOI2005]王室联邦(树分块乱搞)
传送门 想了半小时,没什么思路.. 看了题解,是个叫做树分块的奇奇怪怪的操作.. 题解 树分块的研究 #include <cstdio> #include <cstring> ...
- 【BZOJ】2456 mode(乱搞)
Description 给你一个n个数的数列,其中某个数出现了超过n div 2次即众数,请你找出那个数. Input 第1行一个正整数n.第2行n个正整数用空格隔开. Output 一行一个正整数表 ...
- bzoj 4900 [CTSC2017]密钥 模拟+乱搞
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4900 #include<cstring> #include<cmath&g ...
- 【BZOJ-4523】路由表 Trie树 + 乱搞
4523: [Cqoi2016]路由表 Time Limit: 30 Sec Memory Limit: 512 MBSubmit: 155 Solved: 98[Submit][Status][ ...
- Bzoj 1926: [Sdoi2010]粟粟的书架(二分答案+乱搞+主席树)
1926: [Sdoi2010]粟粟的书架 Time Limit: 30 Sec Memory Limit: 552 MB Description 幸福幼儿园 B29 班的粟粟是一个聪明机灵.乖巧可爱 ...
随机推荐
- 【原创】你知道Oracle 10G能存多少数据吗
昨天晚上在看Oracle 10G联机文档中关于bigfile tablespaces的描述(引用1),发现了关于Oracle存储极限的简单描述.bigfile tablespaces的存在,让Orac ...
- JAVA版CORBA程序
1.题目分析题目1.Java版CORBA程序1——HelloWorld编写实现显示“Hello,World!+班级+中文姓名”字符串.题目2.JAVA版CORBA程序2——Counter编写实现连加. ...
- 【转载】Java IO 转换流 字节转字符流
字节流输入字节流:---------| InputStream 所有输入字节流的基类. 抽象类.------------| FileInputStream 读取文件的输入字节流.----------- ...
- Day 19 numpy 模块
numpy 模块(多维数组) import numpy as np arr=np.array([1,2,3,4],[5,6,7,8]) print(arr) #[[1 2 3 4] #[5 6 7 8 ...
- 大话数据结构pdf高清版下载
大话数据结构PDF下载 不得不说严老师版的虽然比较经典,但是真的有点难理解啊,而大话数据结构这本书还是比较不错的,通俗易懂,反正我个人觉得很不错,希望对诸位有帮助. 链接:点击打开 密码:xovz p ...
- ecshop 输出数组
找到include/cls_template.php文件 找到get_val()函数,可以在大约629行加入 case 'print_r': $p = 'print_r(' . $p . ',true ...
- js实现的时间轴效果
今天整理以前的资料发现以前写的一个时间轴效果,当时也是网上找了很久没有找到,就自己写了一个,现在发出来给有需要的人,代码写的可能有点乱. 效果图: 下面是美工做的设计图的效果(有个美工就是好): 下面 ...
- java 反射之获取泛型对象的所有字段与对应的值(包括父类的)
上代码: public static void main(String[] args) throws IntrospectionException { SysUser obj = new SysUse ...
- Spring Web Flow实例教程
目录: 参考文献 购物车用例 什么情况下可以使用 Spring Web Flow? 配置 Spring Web MVC 配置 Spring Web Flow 2.0 的基础 在购物车示例应用中配置 S ...
- 关于约束ENABLE NOVALIDATE的一个疑问
http://www.dbunix.com/?p=188 关于约束ENABLE NOVALIDATE的一个疑问 CREATE TABLE test (id varchar2(12), name var ...