zoukankan      html  css  js  c++  java
  • [hdu2087]剪花布条(KMP)

    题意:求存在模式串个数,不可重复。

    解题关键:模板题。整理模板用。重复和不可重复的区别在下面已标出。主要是j的变化。

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 #include<cstdlib>
     5 #include<cmath>
     6 #include<iostream>
     7 #define N 1000002
     8 using namespace std;
     9 typedef long long ll;
    10 int Next[N];
    11 char s[N],t[N];
    12 int slen,tlen;
    13 int n,m;
    14 int num=0,num1=0,num2=0;
    15 void getNext(){
    16     int i=0,j=-1;
    17     Next[0]=-1;
    18     while(i<tlen){
    19         if(j==-1||t[i]==t[j]) Next[++i]=++j;
    20         else j=Next[j];
    21     }
    22 } 
    23 int kmp_index(){
    24     int i=0,j=0;
    25     while(i<slen&&j<tlen){
    26         if(j==-1||s[i]==t[j]) i++,j++;
    27         else j=Next[j];
    28     }
    29     if(j==tlen) return i-j;
    30     else return -1;
    31 }
    32 
    33 int kmp_count(){
    34     int ans=0,i=0,j=0;
    35     for(i=0;i<slen;i++){
    36         while(j>0&&s[i]!=t[j]) j=Next[j];
    37         if(s[i]==t[j]) j++;
    38         if(j==tlen){
    39             ans++;
    40             j=0;//j=Next[j];
    41         }
    42     }
    43     return ans;
    44 }
    45 
    46 int main(){
    47     while(scanf("%s",s)&&s[0]!='#'){
    48         scanf("%s",t);
    49         slen=strlen(s);
    50         tlen=strlen(t);
    51         getNext();
    52         int ans=kmp_count();
    53         printf("%d
    ",ans);
    54     }
    55     return 0;
    56 }
  • 相关阅读:
    hdu In Action
    hdu Bus Pass
    acm steps chapter6总结
    原创:扫雷游戏
    排列组合算法
    原创:泛型方法例子
    原创:QQ群发言统计
    菜鸟也做有道难题①
    查询时带Ntext或nvarchar(Max)到底有多影响速度
    使用正则要注意的几点
  • 原文地址:https://www.cnblogs.com/elpsycongroo/p/7565628.html
Copyright © 2011-2022 走看看