hdu 4644 BWT (kmp)
看完题目你非常easy想到,这个题目的关键点就是怎样把给出的数组还原成原数组。
还原的原数组之后无论是AC自己主动机 还是 kmp都能够解决 - -尽管我认为kmp会超时的感觉。
那么怎样还原这个字符串就是在个题目的难点。。。
gc$aaac
1234567
排序之后变成了
$aaaccg
3456271
然后你依照排序后的下标依次走过去
会发现
$->a->c->a->a->c->g
3 5 2 4 6 7
也就恢复了原串。
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#define maxn 100186
using namespace std; struct node
{
char ch;
int index;
bool operator < (const node & cmp)const
{
return ch<cmp.ch;
}
}save[maxn];
char t[maxn];
char str[maxn],txt[maxn];
int next[maxn]; void getnext(int len)
{
next[0]=0;next[1]=0;
for(int i=1;i<len;i++)
{
int j=next[i];
while(j && txt[j]!=txt[i])j=next[j];
next[i+1]=txt[j]==txt[i]?j+1:0;
}
} void find(int n,int m)
{
int j=0;
for(int i=0;i<n;i++)
{
while(j&&txt[j]!=str[i])j=next[j];
if(txt[j]==str[i])j++;
if(j==m){printf("YES\n");return ;}
}
printf("NO\n");
} int main()
{
while(scanf("%s",t)!=EOF)
{
int len=strlen(t);
for(int i=0;i<len;i++)
{
save[i].ch=t[i];
save[i].index=i;
} stable_sort(save,save+len); int now=save[0].index;
for(int i=0;i<len-1;i++)
{
str[i]=save[now].ch;
now=save[now].index;
} int q;
scanf("%d",&q);
while(q--)
{
scanf("%s",txt);
int m=strlen(txt);
getnext(m); find(len-1,m);
}
}
return 0;
}
hdu 4644 BWT (kmp)的更多相关文章
- HDU 4644 BWT(Burrows–Wheeler transform+KMP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4644 题意:给出一个串,按照下面的步骤得到一个新串: (1)首先将其后面增加一个美元符号: (2)将每 ...
- HDU 2087 KMP模板题
1.HDU 2087 2.题意:一个主串,一个子串,求子串在主串里出现了几次. 3.总结:看了题解,还是不太懂.. //#include<iostream>#include<cmat ...
- Number Sequence HDU 1711(KMP)
http://acm.hdu.edu.cn/showproblem.php?pid=1711 首次接触KMP,自己都不是特别理解.在网上百度看了好几个帖子之后,对KMP也有了初步的理解. #inclu ...
- hdu 1686 Oulipo KMP匹配次数统计
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1686 分析:典型的KMP算法,统计字符串匹配的次数. 用Next数组压缩时间复杂度,要做一些修改. / ...
- HDU 4763 (KMP算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4763 题目大意:给定一串字符,从中找出符合“EAEBE”格式的E的最大字符数.AB可以是任意数量的任意 ...
- hdu 5510 Bazinga KMP+尺取法
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5510 题意:至多50组数据,每组数据至多500个字符串,每个字符串的长度最长为2000.问最大的下标( ...
- HDU 1358 Period KMP
题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=1358 求周期问题,简单KMP—— AC代码: #include <iostream> # ...
- HDU 5782 Cycle —— KMP
题目:Cycle 链接:http://acm.hdu.edu.cn/showproblem.php?pid=5782 题意:给出两个字符串,判断两个字符串的每一个前缀是否循环相等(比如abc 和 ca ...
- hdu 5510 Bazinga (KMP+暴力标记)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5510 思路: 一开始直接用KMP莽了发,超时了,后面发现如果前面的字符串被后面的字符串包含,那么我们就 ...
随机推荐
- sqlite3-查看数据库
在做android开发的时候,有时候我们需要查看系统下的数据库,这时候我们可以使用下面的方法 1.数据库存放位置 data/data/package/databases/abc.db 2.导出数据库 ...
- Eclipse导出Library
在工作中遇到开发SDK,记录下导出Library的过程. 1.导出 选中项目>属性>Android 配置Is library例如以下图: 选中项目>导出>JAR ...
- css滑动鼠标到img后,切换图片
写了个样例: <a href="#"><img src="http://csdnimg.cn/pubfooter/images/gongshang_lo ...
- SafeSEH原理及绕过技术浅析
SafeSEH原理及绕过技术浅析 作者:magictong 时间:2012年3月16日星期五 摘要:主要介绍SafeSEH的基本原理和SafeSEH的绕过技术,重点在原理介绍. 关键词:SafeSEH ...
- Altium Designer中的粉红色网格和绿色框框
- jQuery中$(document).ready()和window.onload的区别?
document.ready和document.load的区别?(JQ中的$(document).ready()和window.onload的区别?) window.onload,是采用DOM0级事件 ...
- [Vue] Load components when needed with Vue async components
In large applications, dividing the application into smaller chunks is often times necessary. In thi ...
- Machine Learning With Spark学习笔记(提取10万电影数据特征)
注:原文中的代码是在spark-shell中编写运行的,本人的是在eclipse中编写运行,所以结果输出形式可能会与这本书中的不太一样. 首先将用户数据u.data读入SparkContext中.然后 ...
- 126邮件POP3,SMTP服务器与端口设置
- [Nuxt] Load Data from APIs with Nuxt and Vuex
In a server-rendered application, if you attempt to load data before the page renders and the data f ...