zoukankan      html  css  js  c++  java
  • hdu 3746(KMP的循环节问题)

    题意:给你一个字符串,要求将字符串的全部字符最少循环2次需要添加的字符数。

    例子:

    abcabc 已经循环2次,添加数为0

    abcac 没有循环2次,添加字符abcac。数目为5.

    abcabcab 已经循环过2次,但第三次不完整,需要添加数为1.

    分析:就是一个简单的KMP循环节问题,但我只能说杭电的数据太水了,一开始我写的一个明显有BUG的代码也能够AC,算了不说了!!

    代码实现:

    #include<iostream>
    #include<cstring>
    using namespace std;
    char a[100001];
    int next[100001];
    int main()
    {
        int T,len,i,j,nima;
        while(scanf("%d",&T)!=EOF)
        {
            getchar();
            while(T--)
            {
                scanf("%s",a+1);
                len=strlen(a+1);
                i=1;j=0;next[1]=0;
                while(i<=len)
                {
                    if(j==0||a[i]==a[j])
                    {
                        i++;j++;
                        next[i]=j;
                    }
                    else
                        j=next[j];
                }
                nima=(len+1)-next[len+1];
                if(len%nima==0&&len!=nima//这里要注意个是循环节的长度不能等于它自己本身就是len!=nima
                   printf("%d\n",0);
                else
                    printf("%d\n",nima-len%nima);
            }
        }
        return 0;
    }
  • 相关阅读:
    2019.9.21 Tomcat基于端口的虚拟主机
    shell脚本作业
    DNS原理及其解析过程
    用户管理系统脚本
    pxe批量装机
    磁盘分区挂载脚本
    安装apache脚本
    linux远程拷贝命令及not a regular file 解决方案
    卸载虚拟网卡的方法
    watch的用法
  • 原文地址:https://www.cnblogs.com/jiangjing/p/3019945.html
Copyright © 2011-2022 走看看