• POJ3461一道kmp题,字符串Hash也可


    题目链接:http://icpc.njust.edu.cn/Problem/Pku/3461/

    代码如下:

     1 #include<cstdio>
     2 #include<string.h>
     3 using namespace std;
     4 typedef unsigned int ui;
     5 typedef long long ll;
     6 typedef unsigned long long ull;
     7 #define pf printf
     8 #define mem(a,b) memset(a,b,sizeof(a))
     9 #define prime1 1e9+7
    10 #define prime2 1e9+9
    11 #define pi 3.14159265
    12 #define lson l,mid,rt<<1
    13 #define rson mid+1,r,rt<<1|1
    14 #define scand(x) scanf("%llf",&x) 
    15 #define f(i,a,b) for(int i=a;i<=b;i++)
    16 #define scan(a) scanf("%d",&a)
    17 #define dbg(args) cout<<#args<<":"<<args<<endl;
    18 #define inf 0x3f3f3f3f
    19 #define maxn 1000010
    20 int n,m,t;
    21 ull Hash[maxn],h[maxn];
    22 char a[maxn],b[maxn];
    23 const int p=131;
    24 void init()
    25 {
    26     h[0]=1;
    27     f(i,1,maxn-1)
    28     {
    29         h[i]=h[i-1]*p;
    30     }
    31  } 
    32  
    33 int main()
    34 {
    35     //freopen("input.txt","r",stdin);
    36     //freopen("output.txt","w",stdout);
    37     //std::ios::sync_with_stdio(false);
    38     scan(t); 
    39     init();
    40     while(t--)
    41     {
    42         scanf("%s%s",&a,&b);
    43         int lena=strlen(a);
    44         int lenb=strlen(b);
    45         int ans=0;
    46         int hasha=a[0]-'a',hashb;
    47         f(i,1,lena-1)
    48         {
    49             hasha=hasha*p+a[i]-'a';
    50         }
    51         Hash[0]=b[0]-'a';
    52         f(i,1,lenb-1)
    53         {
    54             Hash[i]=Hash[i-1]*p+b[i]-'a';
    55         }
    56         f(i,0,lenb-lena)
    57         {
    58             int l=i;
    59             int r=l+lena-1;
    60             hashb=Hash[r]-Hash[l-1]*h[lena];
    61             if(hasha==hashb)ans++;
    62         //    dbg(ans);
    63         }
    64         pf("%d
    ",ans);
    65     }
    66  } 
  • 相关阅读:
    背包问题
    floyed算法
    读Windows编程
    PB串口编程资料(转)
    读TCP-IP详解卷1:协议(1)
    Oracle把两个空格以上的空格,替换为两个空格
    PB中multieditline空间的“~r~n"转"~n"
    PB中掉用Run以后,等Run的程序关闭以后才会执行后边的语句
    一个关于生成随机数的算法
    英语词根
  • 原文地址:https://www.cnblogs.com/randy-lo/p/12535421.html
Copyright © 2020-2023  润新知