本题是KMP算法的典型运用,顺带说一下,csdn什么时候开始支持富文本格式的粘贴了?哈哈,现在不用点那个黄色的小笔去插入彩色代码了!
/* THE PROGRAM IS MADE BY PYY */
/*----------------------------------------------------------------------------//
Copyright (c) 2011 panyanyany All rights reserved.
URL : http://acm.hdu.edu.cn/showproblem.php?pid=1711
Name : 1711 Number Sequence
Date : Tuesday, May 3, 2011
Time Stage : 1 hours around
Result:
3905935
|
2011-05-03 23:30:20
|
Accepted
|
1711
|
1890MS
|
4268K
|
1631 B
|
C++
|
pyy
|
Test Data:
Review:
//----------------------------------------------------------------------------*/
#include <iostream>
#include <stdio.h>
using namespace std;
const int ms = 10010, ns = 1000010;
int tcase, n, m;
int major[ns], model[ms], next[ms];
void getNext( const int * arr )
{
int i, j, k;
next[1] = 0;
j = 1; i = 2;
while( i <= m )
{
if( arr[j] == arr[i] )
{
next[i] = next[j];
++j;
}
else
{
next[i] = j;
}
++i;
}
}
void kmp()
{
int i, j, k, start = -1, end = -1;
getNext( model );
j = 1; i = 1;
while( i <= n && j <= m )
{
if( major[i] == model[j] || j == 0 )
{
++i;
++j;
}
else
{
j = next[j];
}
}
if( j - 1 != m )
puts("-1");
else
printf("%d/n", i - j + 1);
}
int main()
{
int i, j, k;
while( cin >> tcase )
{
while( tcase-- )
{
cin >> n >> m;
for( i = 1; i <= n; ++i )
cin >> major[i];
for( i = 1; i <= m; ++i )
cin >> model[i];
kmp();
}
}
return 0;
}
分享到:
相关推荐
HDU-1711 Number Sequence(KMP算法)For each test case, you should output one line wh
next[i]的含义是在str[i]之前的字符串str[0...i]中,必须以str[i-1]结尾的后缀子串(不能包含str[0])与必须以str[0]开头的前
【hdu5306】Gorgeous Sequence 线段树区间最值操作-附件资源
HDU的1250,主要是利用高精度加法,但是代码有点繁琐,效率不是很高
杭电ACMhdu1163
HDU1059的代码
hdu1001解题报告
hdu 1574 passed sorce
HDU的一题........HDU DP动态规
hdu acm 教案 搜索入门 hdu acm 教案 搜索入门
hdu2101AC代码
搜索 dfs 解题代码 hdu1241
hdu 5007 Post Robot 字符串枚举。 暴力一下就可以了。
hdu acm 教案 动态规划(1) hdu acm 教案 动态规划(1)
ACM HDU题目分类,我自己总结的大概只有十来个吧
hdu 1166线段树代码
HDU最全ac代码
hdu动态规划算法集锦
自己做的HDU ACM已经AC的题目
hdu题目分类