zoukankan      html  css  js  c++  java
  • POJ3461Oulipo 题解

    题目大意:

      求字符串A在字符串B中出现的次数。

    思路:

      KMP板题,用Hash也可水过~要学习KMP可参考http://blog.csdn.net/u011564456/article/details/20862555

    代码:

    KMP:

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 using namespace std;
     5 
     6 char s1[10009],s2[1000009];
     7 int next[10009];
     8 
     9 int main()
    10 {
    11     int n,i,l1,l2,j,ans;
    12     scanf("%d",&n);
    13     while (n--)
    14     {
    15         scanf("%s%s",s1,s2);
    16         l1=strlen(s1),l2=strlen(s2);
    17         for(j=next[0]=0,i=1;i<l1;i++)
    18         {
    19             for (;j && s1[j]^s1[i];j=next[j-1]);
    20             if (s1[i]==s1[j]) j++;
    21             next[i]=j;
    22         }
    23         for (i=j=ans=0;j<l2;j++)
    24         {
    25             for (;i && s1[i]^s2[j];i=next[i-1]);
    26             if (s1[i]==s2[j]) i++;
    27             if (i==l1) ans++,i=next[i-1];
    28         }
    29         printf("%d
    ",ans);
    30     }
    31     return 0;
    32 }

    Hash:

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 using namespace std;
     5 const int S=999984,mod=1000000007,N=10009,M=1000009;
     6 char s1[N],s2[M];
     7 long long Hash1[N],Hash2[M],mi[M];
     8 
     9 int gethash(int l,int r)
    10 {
    11     return (Hash2[r]-Hash2[l-1]*mi[r-l+1]%mod+mod)%mod;
    12 }
    13 
    14 int main()
    15 {
    16     int n,i,j,l1,l2,ans;
    17     for (mi[0]=i=1;i<=M;i++) mi[i]=mi[i-1]*S%mod;
    18     scanf("%d",&n);
    19     while (n--)
    20     {
    21         scanf("%s%s",s1+1,s2+1);
    22         l1=strlen(s1+1),l2=strlen(s2+1);
    23         for (i=1;i<=l1;i++) Hash1[i]=(Hash1[i-1]+s1[i])*S%mod;
    24         for (i=1;i<=l2;i++) Hash2[i]=(Hash2[i-1]+s2[i])*S%mod;
    25         for (ans=0,i=1;i<=l2-l1+1;i++)
    26             if (gethash(i,i+l1-1)==Hash1[l1]) ans++;
    27         printf("%d
    ",ans);
    28     }
    29     return 0;
    30 }
    我一直在繁华的苍凉中徘徊着,用一颗OI的心寻找着生命和宇宙的美妙与玄奥。
  • 相关阅读:
    面向对象三大特性五大原则
    如何快速的浏览项目
    网页测速
    截取字符串
    iOS-tableView点击下拉菜单
    iOS_block内存分析
    iOS_ @property参数分析
    iOS-设计模式之Block
    iOS-设计模式之代理反向传值
    iOS-设计模式之通知
  • 原文地址:https://www.cnblogs.com/HHshy/p/5734100.html
Copyright © 2011-2022 走看看