哈希26分,求大佬调一下
查看原帖
哈希26分,求大佬调一下
350945
linlioo楼主2022/1/17 20:49
#include<bits/stdc++.h>
#define ull unsigned long long
using namespace std;
struct letter
{
	ull len,data,s;
}l[100010];
char a[100010];
ull h[100010],w;
char s[100010],s1[100010];
ull ksm(ull a,ull b)
{
	ull ans=1;
	while(b)
	{
	    if(b&1)
	    ans=ans*a;
	    a=a*a;
	    b>>=1;
	}
	return ans;
}
int main()
{
	ull n;
	scanf("%s",s+1);
	scanf("%d",&n);
	for(ull i=1;i<=n;i++)
	{
		scanf("%s",a+1);
		ull len=strlen(a+1);
		for(ull i=1;i<=len;i++)
		{
			h[i]=h[i-1]*26+a[i]-'a';
		}
		l[i].len=len;
		l[i].data=h[len];
		l[i].s=ksm(26,len);
	}
	int len=strlen(s+1);
	for(int i=1;i<=len;i++)
	{
		s1[++w]=s[i];
		h[w]=26*h[w-1]+s1[w]-'a';
		for(int j=1;j<=n;j++)
		{
			if(w>=l[j].len)
			{
				if(h[w]-h[w-l[j].len]*l[j].s==l[j].data)
				{
					w-=l[j].len;
				}
			}
		}
	}
	for(int i=1;i<=w;i++)
	{
	    printf("%c",s1[i]);
	}
 	return 0;
}
2022/1/17 20:49
加载中...