zoukankan      html  css  js  c++  java
  • poj-2406(kmp水题)

    题意:定义一个a*b=字符串a连接字符串b;给你一个字符串s,问你这个字符串最多能用多少个字符串t连接得到;例如:aaaa=4个a构成;

    解题思路:kmp水题,next数组除了查找字串以外最广泛的一种用法,用来判定一个串是不是循环串,如果是,输出原串的长度/最小的循环节,否则,输出1就行了;

    代码:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #define maxn 1000500
    using namespace std;
    int next[maxn];
    char t[maxn];
    int tlen;
    void get_next()
    {
        int j=0,k=-1;next[0]=-1;
        while(j<tlen)
        {
            if(k==-1||t[j]==t[k])
                next[++j]=++k;
            else
                k=next[k];
        }
    }
    int main()
    {
        while(gets(t))
        {
            tlen=strlen(t);
            if(strcmp(t,".")==0)
                break;
            get_next();
            int len=tlen-next[tlen];
            if(tlen%len==0)
            {
                printf("%d
    ",tlen/len);
            }
            else
            {
                printf("1
    ");
            }
            //printf("%d
    ",ans);
        }
    }
    

      

  • 相关阅读:
    powershell,系统学习的第一种脚本语言
    mysql的source命令
    timer--计时器
    document.write 方法
    数组去重
    Abdicate
    轮播图
    使用 margin 让div块内容居中
    模运算 NOJ 1037
    模运算 NOJ 1037
  • 原文地址:https://www.cnblogs.com/huangdao/p/9430596.html
Copyright © 2011-2022 走看看