码迷,mamicode.com
首页 > 其他好文 > 详细

POJ刷题(2406)

时间:2015-04-14 16:42:45      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:poj   算法   acm   优化   

程序(已经accepted):

#include<stdio.h>
#include<string.h>
#include<memory.h>
#define N 1000010

char str[N];
int next[N];

int get_next(char pattern[], int next[])
{
    int j=0,k=-1;
    int len=strlen(pattern);
    next[0]=-1;
    while(j<len)
    {
        if(k==-1||pattern[j]==pattern[k])
            next[++j]=++k;
        else
            k=next[k];
    }
    j=len-k;//如果最后一个位置不匹配,那么就会滚到len-k的位置,也就是最小重复字串的长度。
    if(len%j==0)
        return len/j;
    else
        return 1;
}


int main()
{
    while(scanf("%s", str), str[0]!='.')
    {
        printf("%d\n", get_next(str, next));
    }
    return 0;
}</span><strong style="font-size:18px; color: rgb(0, 0, 153);">
</strong>

运行时间:

技术分享


本题还是很有价值的:

1. 考察了KMP算法的灵活应用;

2. 由于1000010*4(int型)会超过栈空间(1M),所以程序会崩溃,因此只能做全局变量。

POJ刷题(2406)

标签:poj   算法   acm   优化   

原文地址:http://blog.csdn.net/xumesang/article/details/45040261

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!