• HDU-3746-KMP理解失配


    这个有点意思,要理解失配数组

    题意是要计算出需要构造成循环节相连的最小个数

    利用失配构造函数求出单个循环节,然后计算出需要的加上的珠子个数

     1 #include <cstdio>
     2 #include <algorithm>
     3 #include <cstring>
     4 #include <ctype.h>
     5 #include <cstdlib>
     6 #include <stack>
     7 #include <set>
     8 #include <map>
     9 #include <queue>
    10 #include <string>
    11 #include <cmath>
    12 
    13 using namespace std;
    14 
    15 int T;
    16 char P[100100];
    17 
    18 int solve(char *P)
    19 {
    20     int m = (int)strlen(P);
    21     int f[m+10];
    22     memset(f,-1,sizeof f);
    23     int i = 0,j = -1;
    24     while(i != m)
    25     {
    26         if(j == -1||P[i] == P[j])
    27             f[++i] = ++j;
    28         else 
    29             j = f[j];
    30     }
    31     int k = m-f[m];
    32     return (k != m && f[m]%k==0) ? 0 : k-f[m]%k;
    33 }
    34 
    35 int main()
    36 {
    37     scanf("%d",&T);
    38     while(T--)
    39     {
    40         scanf("%s",P);
    41         printf("%d
    ",solve(P));
    42     }
    43 }
  • 相关阅读:
    JS-07 (js的面向对象编程)
    AI SiameseFC
    phpstorm调试
    Php 编译扩展
    canvas
    AI FCN
    AI WebGL
    Python flask
    JIT 即时编译
    小程序
  • 原文地址:https://www.cnblogs.com/helica/p/4730470.html
Copyright © 2020-2023  润新知