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

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

記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. Linq select 语法

    文档:https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b 1.可以对查询出来的结果做一些转换,下面的例子在数组中查找以"B&q ...

  2. Django配置Bootstrap, js

    1.首先在APP目录下创建一个static文件夹 如图: # Application definition INSTALLED_APPS = [ 'django.contrib.admin', 'dj ...

  3. 我对于UI设计这个领域的理解

    User Interface(UI),包括三部分用户.界面以及用户与界面之间的交互关系.UI设计则是指对软件的人机交互.操作逻辑.界面美观的整体设计. 如何看待UI设计这个领域? 任何一个行业的出现都 ...

  4. HTML5 history详解

    最近研究vue-router单页转跳而不向服务器请求的原理, 主要是HTML5 history以及hash的应用,支持history时使用history模式 下面详细学习了一下常用的history相关 ...

  5. 20155210 2016-2017-2 《Java程序设计》第7周学习总结

    20155210 2016-2017-2 <Java程序设计>第7周学习总结 教材学习内容总结 时间的度量: GMT(Greenwich Mean Time)时间:现在不是标准时间 世界时 ...

  6. yii2 控制器的生命周期

    控制器生命周期 http://www.yii-china.com/doc/guide/structure_controllers.html 处理一个请求时,应用主体 会根据请求路由创建一个控制器,控制 ...

  7. Navicat for oracle cannot load OCI DLL

    Navicat for oracle 提示 cannot load OCI DLL87,126,193 instant client package is required for basic and ...

  8. SQL 查找重复记录

    CREATE TABLE product( ID INT IDENTITY(1,1) PRIMARY KEY NOT NULL, Pid INT NOT NULL, Pname VARCHAR(50) ...

  9. tornado+bootstrap急速搭建你自己的网站

    bootstrap既然是这么的流行又能省很多的事为什么不用他呢?再加上牛X的produced by FB的tornado简直如虎添翼了! 1. 安装配置 安装所需要的库等内容.这里没什么需要多讲的.t ...

  10. day13(反射,BeanUtils包)

    反射, 获取字节码文件的方式: 方式一: 对象.getClass(); 方式二: 类名.Class; 方式三:   Class.forName(String Class); 通过字节码文件获取对象 定 ...