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莽了发,超时了,后面发现如果前面的字符串被后面的字符串包含,那么我们就 ...
随机推荐
- gogodroid--android 上的IPV6工具
gogodroid--android 上的IPV6工具 系统需求是 Android 1.6以上的系统,已经root,能够执行modprobe命令(在终端里输入modprobe,如果显示了帮助便可以), ...
- go package的理解
golang package是基本的管理单元, 同一个package下面,可以有非常多的不同文件,只要 每个文件的头部 都有 如 "package xxx" 的相同name, ...
- 关于python的序列和矩阵运算的写法
#其实下面是这样一个函数,传入的是obj_value,传出的是newobj_value.,, #这里的obj_value实际上是一个序列... for z in obj_value: ...
- Java Web学习总结(8)——使用Cookie进行会话管理
一.会话的概念 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 有状态会话:一个同学来过教室,下次再来教室,我们会知道这个同学曾 ...
- 很吊炸天的Xcode插件,你想要的这都有
整理自BigPolarBear的博客 .杂技杂记 以及CC此前整理. 古人云"工欲善其事必先利其器",打造一个强大的开发环境.是马上提升自身战斗力的绝佳途径!下面是搜集的一些有力 ...
- C# SocketAsyncEventArgs类
Namespace:System.Net.Sockets Assemblies:System.Net.Sockets.dll, System.dll, netstandard.dll (Represe ...
- Altium Designer中画pcb如何隐藏和显示地线
如何隐藏: 如何显示: 按下N后
- C++胜者树
#include <iostream> #define MAX_VALUE 0x7fffffff using namespace std; //在这里我先反思一下.不知道怎么搞的,这个算法 ...
- amazeui学习笔记--js插件(UI增强2)--按钮交互Button
amazeui学习笔记--js插件(UI增强2)--按钮交互Button 一.总结 1.按钮loading状态: <button type="button" class=&q ...
- Let's do our own full blown HTTP server with Netty--转载
原文地址:http://adolgarev.blogspot.com/2013/12/lets-do-our-own-full-blown-http-server.html Sometimes ser ...