zoukankan      html  css  js  c++  java
  • hdu 3746 Cyclic Nacklace(next数组求最小循环节)

    题意:给出一串字符串,可以在字符串的开头的结尾添加字符,求添加最少的字符,使这个字符串是循环的(例如:abcab 在结尾添加1个c变为 abcabc 既可)。

    思路:求出最小循环节,看总长能不能整除。

    #include<iostream>
    #include<stdio.h>
    #include<string.h>
    using namespace std;
    
    #define MaxSize 100005
    
    int _next[MaxSize];
    
    void GetNext(char t[]){//求next数组
        int j,k,len;
        j=0;
        k=-1;
        _next[0]=-1;
        len=strlen(t);
        while(j<len){
            if(k==-1||t[j]==t[k]){
                ++j;
                ++k;
                _next[j]=k;//此句可由优化替代
                /*优化(仅保证求KMPIndex时可用。谨慎使用。)
                if(t[j]!=t[k])next[j]=k;
                else next[j]=next[k];
                */
            }
            else k=_next[k];
        }
    }
    
    int main(){
        char str[MaxSize];
        int t,i,len,len2;
        scanf("%d",&t);
        while(t--){
            scanf("%s",str);
            len=strlen(str);
            GetNext(str);//求子串的next数组
            if(_next[len]==0)printf("%d
    ",len);
            else{
                len2=len-_next[len];//最小循环节
                if(len%len2==0)printf("0
    ");
                else printf("%d
    ",len2-len%len2);
            }
        }
        return 0;
    }
    View Code
  • 相关阅读:
    AXI协议(一)
    System Verilog基础(一)
    AHB协议
    验证的概述
    简易APB4 slave实践
    APB协议
    指令跳转与预测
    HDU4405--Aeroplane chess(概率dp)
    BZOJ1419——Red is good(期望dp)
    BZOJ1426----收集邮票(期望dp)
  • 原文地址:https://www.cnblogs.com/gongpixin/p/4749052.html
Copyright © 2011-2022 走看看