zoukankan      html  css  js  c++  java
  • BZOJ 1355[Baltic2009]Radio Transmission(KMP)

    题意

    给你一个字符串,它是由某个字符串不断自我连接形成的。 但是这个字符串是不确定的,现在只想知道它的最短长度是多少.

    (n<=1000000)

    题解

    这种求最小循环节的题一般是KMP。

    因为有一个很强的结论if(len%(len-nxt[len])==0)那这个字符串的最小环节为len-nxt[len]。

    又因为题目说明给出的是有循环节的,所以直接输出len-nxt[len]就行了。

     1 #include<iostream>
     2 #include<cstring>
     3 #include<cmath>
     4 #include<cstdio>
     5 #include<algorithm>
     6 using namespace std;
     7 const int N=1001000;
     8 int n,nxt[N];
     9 char s[N];
    10 int main(){
    11     scanf("%d",&n);
    12     scanf("%s",s+1);
    13     nxt[1]=0;
    14     for(int i=2,j=0;i<=n;i++){
    15         while(j&&s[j+1]!=s[i])j=nxt[j];
    16         if(s[j+1]==s[i])j++;
    17         nxt[i]=j;
    18     }
    19     printf("%d",n-nxt[n]);
    20     return 0;
    21 }
  • 相关阅读:
    SQLite的sqlite_sequence表
    缓存区溢出漏洞工具Doona
    SQLite的sqlite_master表
    dfs1321
    三维bfs(HUD1253胜利大逃亡)
    dfs模版
    poj3259: Wormholes(BF模板题)
    Bellman-Ford算法
    POJ1611:The Suspects(模板题)
    poj3126
  • 原文地址:https://www.cnblogs.com/Xu-daxia/p/9530358.html
Copyright © 2011-2022 走看看