首页 > 其他 > 详细

Hdu_1771 Number Sequence 字符串匹配

时间:2016-08-14 23:44:30      阅读:170      评论:0      收藏:0      [点我收藏+]

题目:匹配

方法:没用KMP,用了字符创hash

/************************************************
Author        :DarkTong
Created Time  :2016/8/14 21:53:07
File Name     :Hdu_1711.cpp
*************************************************/

#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ULL;
typedef long long LL;
const int INF = 0x3f3f3f3f;
const double eps = 1e-9;

const int maxn = 1100000 + 10;
const ULL x = 100007;
int s[maxn];
ULL p[maxn], h[maxn];
void init()
{
    p[0]=1;
    for(int i=1;i<maxn;++i) p[i]=p[i-1]*x;
}
void Init(int len)
{
    h[len]=0;
    for(int i=len-1;i>=0;--i) h[i]=h[i+1]*p[1]+s[i];
}
ULL Hash(int i, int L)
{
    return h[i]-h[i+L]*p[L];
}
int main()
{
    int T, cas=1, n, m;
    init();
    scanf("%d", &T);
    while(T--)
    {
        scanf("%d%d", &n,&m);
        for(int i=0;i<n;++i) scanf("%d", &s[i]);
        s[n] = INF;
        for(int i=n+1;i<n+m+1;++i) scanf("%d", &s[i]);
        int tn = n+m+1;
        Init(tn);
        int ans = -1;
        for(int i=0;i<n;++i)
        {
            if(Hash(i, m)==Hash(n+1, m))
            {
                ans = i+1; break; 
            }
        }
        printf("%d\n", ans);
    }
    
    return 0;
}

Hdu_1771 Number Sequence 字符串匹配

原文:http://www.cnblogs.com/DarkTong/p/5771182.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!