zoukankan      html  css  js  c++  java
  • 剪花布条 HDU

    剪花布条 HDU - 2087

    要求各个匹配出来的子串不重叠的kmp。实际上直接贪心从前往后找,每找到一个就把当前j标为0即可。(一般kmp是标为f[j])

     1 #include<cstdio>
     2 #include<cstring>
     3 int f[1010];
     4 char s[1010];
     5 char s2[1010];
     6 int m,n;
     7 void getf()
     8 {
     9     int i=0,j=f[0]=-1;
    10     while(i<m)
    11     {
    12         while(j>=0&&s[i]!=s[j])    j=f[j];
    13         i++;j++;
    14         f[i]=s[i]==s[j]?f[j]:j;
    15     }
    16 }
    17 int kmp()
    18 {
    19     int i=0,j=0,ans=0;
    20     while(i<n)
    21     {
    22         while(j>=0&&s[j]!=s2[i])    j=f[j];
    23         i++;j++;
    24         if(j==m)
    25         {
    26             ans++;
    27             j=0;
    28         }
    29     }
    30     return ans;
    31 }
    32 int main()
    33 {
    34     while(scanf("%s%s",s2,s)==2)
    35     {
    36         m=strlen(s);
    37         n=strlen(s2);
    38         getf();
    39         printf("%d
    ",kmp());
    40     }
    41     return 0;
    42 }
  • 相关阅读:
    销售排行榜
    视频合并的问题
    全排列的问题
    24点的游戏
    分数拆分
    竖式
    MVVM
    package
    WP8.1APP执行流程
    W
  • 原文地址:https://www.cnblogs.com/hehe54321/p/hdu-2087.html
Copyright © 2011-2022 走看看