zoukankan      html  css  js  c++  java
  • POJ-2406-Power Strings

    链接:https://vjudge.net/problem/POJ-2406#author=chen_zhe_

    题意:

    给定若干个长度 ≤ 1000000 的字符串,询问每个字符串最多是由多少个相同的子字符串重复连接而成的。如:ababab 则最多有 3 个 ab 连接而成。

    思路:

    求kmp的next数组,next[len]对应的后缀长度可以被原长整除,则分为整除段,否则为1。

    代码:

    #include <iostream>
    #include <algorithm>
    #include <cstring>
    
    using namespace std;
    
    const int MAXN = 1e6 + 10;
    
    int Next1[MAXN];
    int Next2[MAXN];
    
    void Get_Next1(char *s)
    {
        int i = 0, k = -1, len = strlen(s);
        Next1[i] = k;
        while (i < len)
        {
            if (k == -1 || s[i] == s[k])
            {
                i++;
                k++;
                Next1[i] = k;
            }
            else
                k = Next1[k];
        }
    }
    
    int main()
    {
        char s[MAXN];
        while (~scanf("%s", s))
        {
            if (s[0] == '.')
                break;
            Get_Next1(s);
            int len = strlen(s);
            int res = 1;
            if (len % (len - Next1[len]) == 0)
                res = len / (len - Next1[len]);
            cout << res << endl;
        }
    
        return 0;
    }
    

      

  • 相关阅读:
    demo04-默认标签
    demo03-段落标签
    demo02-标题标签
    demo01-注释标签
    前端基础介绍
    xadmin的详细使用
    设置Linux环境变量中文显示乱码
    ES应用
    HTTP协议
    jboss
  • 原文地址:https://www.cnblogs.com/YDDDD/p/10507613.html
Copyright © 2011-2022 走看看