http://acm.hdu.edu.cn/showproblem.php?pid=2087
Problem Description
一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案。对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢?
Input
输入中含有一些数据,分别是成对出现的花布条和小饰条,其布条都是用可见ASCII字符表示的,可见的ASCII字符有多少个,布条的花纹也有多少种花样。花纹条和小饰条不会超过1000个字符长。如果遇见#字符,则不再进行工作。
Output
输出能从花纹布中剪出的最多小饰条个数,如果一块都没有,那就老老实实输出0,每个结果之间应换行。
Sample Input
abcde a3
aaaaaa aa
#
Sample Output
0
3
#include <iostream>
#include <fstream>
#include <algorithm>
#include <string>
#include <set>
//#include <map>
#include <queue>
#include <utility>
#include <stack>
#include <list>
#include <vector>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <ctime>
#include <ctype.h>
using namespace std;
#define L1 1005
#define L2 1005
char s[L1], p[L2];
int next[L2], len1, len2, res;
void get_next ()
{
int k = -1, j = 0; //k是next值,从-1开始递推
next[0] = -1;
while (j < len2 - 1)
{
if (k == -1 || p[j] == p[k]) //满足递推条件,next值k自加赋给next[j]
{
j++, k++;
if (p[j] != p[k])
next[j] = k;
else next[j] = next[k]; //next值的修正【求next值是为了在不等时模式串p下标由j挪动到next[j]处,但是如果next[j]处的字符跟原来的j处的字符一样的话,就没什么意义了。。。所以修正为next[j]=next[k],直接跳过k,因为k处和j处字符相同,j处与主串匹配不等时没必要挪动到k处】
}
else k = next[k]; //挪动模式串,又回到字符串匹配,只是自己跟自己匹配
}
/*for (j = 0; j < len2; j++)
cout << next[j] << ' ';
cout << endl;*/
}
int kmp (int pos)
{
int i = pos, j = 0; //i从pos开始匹配,j从0开始匹配
while (i < len1 && j < len2)
{
if (j == -1 || s[i] == p[j]) //匹配条件满足,向下继续
i++, j++;
else j = next[j]; //不等就挪动模式串
}
if (j >= len2) //匹配成功
{
res++; //剪出一个小饰条
return i; //返回下一个匹配开始点
}
return -1;
}
int main()
{
int pos;
while (scanf ("%s", s) != EOF)
{
if (s[0] == '#')
break;
res = 0;
scanf ("%s", p);
len1 = strlen (s);
len2 = strlen (p);
get_next();
pos = 0;
while (pos != -1)
pos = kmp(pos); //pos!=-1说明下面还可能匹配成功
printf ("%d\n", res);
}
return 0;
}
分享到:
相关推荐
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题目分类
HDU图论题目分类
hdu-acm源代码(上百题)hdu-acm源代码、hdu-acm源代码hdu-acm源代码
Hdu 1237 解题代码