hdu 4552 怪盗基德的挑战书 (基于hash的LCP)

题目:http://acm.hdu.edu.cn/showproblem.php?pid=4552

题意:

分析:若某一后缀S与文本串T的LCP等于x,那么此后缀对答案的贡献为x,枚举后缀即可。

代码:

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
typedef unsigned long long ULL;
const int maxn = 1e5+6;
const int seed = 131;
ULL H[maxn],X[maxn];
int Len;
char str[maxn];
void Init()
{
	H[Len]=0;
	for(int i=Len-1;i>=0;i--)
		H[i]=H[i+1]*seed+str[i]-'a';
	X[0]=1;
	for(int i=1;i<Len;i++)
		X[i]=X[i-1]*seed;
}
ULL GetHash(int i,int L)
{
	return H[i]-H[i+L]*X[L];
}
int LCP(int a,int b,int lim)
{
	int ret=0,down=1,mid,up=lim;
	while(down<=up)
	{
		mid=(down+up)>>1;
		if(GetHash(a,mid)==GetHash(b,mid))
		{
			down=mid+1;
			if(ret<mid)
				ret=mid;
		}
		else
			up=mid-1;
	}
	return ret;
}
int main()
{
	long long ans;
	while(scanf("%s",str)==1)
	{
		Len=strlen(str);
		Init();
		ans=0;
		for(int i=Len-1;i>=0;i--)
			ans+=LCP(0,i,Len-i);
		printf("%I64d\n",ans%256);
	}
	return 0;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可乐视频社区是一款专业的在线视频直播软件平台软件。软件采用多视频窗口,为用户提供在线交友、在线K歌平台,并辅以小喇叭、印章、礼物等多种道具结合,为用户打造完美的真实交友新体验。需要的朋友快来下载吧! 可乐视频社区特征 1、三公麦视频的互动。在可乐视频社区内,每个房间单位都有三个公麦,用户可以选择上公麦展示自己才艺,与好友交流,发表观点。三视频的设计,能够更好的为用户互动服务。 2、礼物的设计。在可乐视频社区内,您可以向其他好友赠送礼物,增强了感情交流方式,多种礼物设计,对社区内气氛,产生了很强的互动性和传递性。 3、印章的设计。印章是可乐视频社区的独特产品,通过好友之间的加盖印章,对社区内的娱乐性是很大的补充。更会产生搞怪、涂鸦等效果。 4、多种场景设计。场景的设计,能够更好、更炫的表现出您的与众不同。是社区内的身份、地位的体现。 5、小喇叭全站呼叫。可乐视频具有小喇叭功能。使用下喇叭,可以把你想说的话,发到全站,在可乐视频社区内的用户,都可以看得到,想说就说,快乐小喇叭。 6、道具的使用。在可乐视频社区内,有橡皮擦,斗转星移等道具,使用道具,增添了社区内的娱乐气氛,与你的好友,进行快乐玩笑。 7、多种会员身份。可乐视频社区内,具有多种会员身份,每种身份都有不同的权限,体验出在可乐视频社区内的独特地位。   可乐视频社区截图

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值