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

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

記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. Windows 7 手动添加受信任证书教程

    步骤如下: 1.点击开始-运行,如下图: 2.弹出"控制台"窗口如下,如下图: 3.点击"文件-添加/删除管理单元",如下图: 4.选择"证书&quo ...

  2. Ubuntu部分命令的使用简介

    1.查看USB设备 lsusb #查看系统中的usb设备 lsusb –v  #查看详细的usb设备信息 2.ubuntu mount u盘 第一步:查看U盘信息 sudo fdisk -l 得到类似 ...

  3. CComSafeArray

    https://blog.csdn.net/tangaowen/article/details/6554640

  4. centos7 nginx 加入开机启动

    设置nginx开机启动 vi /etc/rc.d/init.d/nginx  #编辑启动文件添加下面内容 ############################################### ...

  5. PLSQL导入导出表的正确步骤

    PLSQL导入导出表的正确步骤 原来总是直接 tools->import talbes->Oracle Import结果发现有的时候会出错:有的表不能正确导入, 导出步骤: 1 tools ...

  6. part1:7-Linux网络配置

    1.虚拟机(Vmware)网络配置 VMware虚拟机对于不同的网络环境提供了三种网卡工作模式: Bridged:网桥模式: 在桥接模式下,计算机A充当路由器与虚拟机之间的“桥”,虚拟机通过计算机A的 ...

  7. c++中类的静态数据成员

    有时需要为某个类的所有对象分配一个单一的存储空间,这个存储空间只是被这个类的对象访问,其他人不能访问,那么这时静态的成员变量是有用的.例如下面用来统计一共创建了多少个对象的变量num class cl ...

  8. 2018.09.30 bzoj3551:Peaks加强版(dfs序+主席树+倍增+kruskal重构树)

    传送门 一道考察比较全面的题. 这道题又用到了熟悉的kruskal+倍增来查找询问区间的方法. 查到询问的子树之后就可以用dfs序+主席树统计答案了. 代码: #include<bits/std ...

  9. Django入门与实践 17-26章总结

    Django入门与实践-第17章:保护视图 Django 有一个内置的视图装饰器 来避免它被未登录的用户访问: 现在如果用户没有登录,将被重定向到登录页面: 现在尝试登录,登录成功后,应用程序会跳转到 ...

  10. hadoop学习笔记(六):HBase体系结构和数据模型

    1. HBase体系结构 一个完整分布式的HBase的组成示意图如下,后面我们再详细谈其工作原理. 1)Client 包含访问HBase的接口并维护cache来加快对HBase的访问. 2)Zooke ...