我們可以枚舉每一個串的最短回文後綴,這樣一定不會算重。

雖然一個字符串可能會有多個回文後綴,但是答案只會在最短的後綴被計算

記f[i]表示長度為i回文串中,沒有長度>1的回文後綴的個數,將總個數減去不合法個數得到答案

我們可以枚舉一個最短回文後綴,記長度為i,則前面n-i任意選,即使產生新回文也行,長度都比i大,則方案是sn−i∗f[i](2&lt;=i&lt;=n)s^{n-i}*f[i](2&lt;=i&lt;=n)sn−i∗f[i](2<=i<=n)

考慮如何計算f[i]f[i]f[i],記x=(i/2)x=(i/2)x=(i/2),則共有sxs^xsx個回文串

我們發現字符串從x->n部分,字符串沒有受到限制,隨便選,再記j為最短回文後綴長度,則f[i]f[i]f[i]要減去f[j]∗s[x−j]f[j]*s[x-j]f[j]∗s[x−j]

有可能最短回文長度會>x,無法計算,但是這個擔心不必要,因為最短回文長度<=x,這個命題可以證明

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll f[10000010],g[10000010],n,s,m,r,c;
int main(){
	freopen("suffix.in","r",stdin);
	freopen("suffix.out","w",stdout);
	scanf("%lld%lld%lld",&n,&s,&m);
	g[0]=1;
	for(int i=1;i<=n;i++)
		g[i]=g[i-1]*s%m;
	r=g[n];
	for(int i=1;i<=n;i++){
		int d=ceil(i/2.0);
		if(i%2==1){
			c=(c*s)%m;
			c=(c+f[d])%m;
		}
		f[i]=(g[d]-c+m)%m;
	}
	for(int i=2;i<=n;i++)
		r=(r-f[i]*g[n-i]%m+m)%m;
	printf("%lld\n",r);
}

jzoj5996的更多相关文章

随机推荐

  1. Redis的复制特性

    对于有扩展平台以适应更高负载经验的工程师和管理员来说,复制(replication)是不可或缺的.复制可以让其他服务器拥有一个不断更新的数据副本,从而使得拥有数据副本的服务器可以用于处理客户端发送的读 ...

  2. htons、htonl与字节序大小端

    判断字节序大小端code #include <stdio.h> int main() { ) == ) printf("big endian\n"); else pri ...

  3. 关于UI设计行业的认识再到认识

    相信很多同学和我一样提及到UI行业时,尤其是连门槛都没有踏入半步时,总会一脸茫然. 我也是一样的,我刚接触UI的前半个月,文章读过好多,作品也看过好多,什么"小白入门UI的十大建议啊&quo ...

  4. Jmeter报文体包含过大附件导致请求报文发送失败的解决办法

    Jmeter中,HTTP request的报文体为一个附件时,如果附件过大,在发送请求报文的时候会失败,办法就是勾选“Use multipart/form-data for POST”

  5. Tomcat的杂七杂八

    localhost_access_log.2016-01-15.txt  原来这里面有访问记录. /logs/catalina.2016-01-22.log 这里有显示失败的信息 2016-01-23 ...

  6. 【Mac】使用PicGIF制作gif动态图片

    动态图片是我们常常需要的,mac系统下制作gif图片,可以使用PicGIF,AppStore中有一个简单版本免费的 环境与工具 1.mac系统 2.PicGIF Lite(可以在AppStore下载) ...

  7. Guava学习笔记:Preconditions优雅的检验参数(java)

    http://www.cnblogs.com/peida/p/guava_preconditions.html 在日常开发中,我们经常会对方法的输入参数做一些数据格式上的验证,以便保证方法能够按照正常 ...

  8. 20. Dog,Man's Best Friend 狗,人类最好的朋友

    . Dog,Man's Best Friend 狗,人类最好的朋友 ①The dogs has always been considered man's best friend.Always note ...

  9. newton法分形图

    方程:z^6-1=0; %f为求解的方程,df是导数,使用的时候用funchandler定义 %res是目标分辨率,iter是循环次数,(xc,yc)是图像的中心,xoom是放大倍数 %参数视自己需求 ...

  10. Java转换Json日期/Date(1487053489965+0800)/格式以及js时间格式 Tue Feb 14 2017 14:06:32 GMT+0800

    /Date(1487053489965+0800)/用Java怎么转换成yyyy-MM-dd的格式 Tue Feb 14 2017 14:06:32 GMT+0800用Java怎么转换成yyyy-MM ...