jzoj5996
我們可以枚舉每一個串的最短回文後綴,這樣一定不會算重。
雖然一個字符串可能會有多個回文後綴,但是答案只會在最短的後綴被計算
記f[i]表示長度為i回文串中,沒有長度>1的回文後綴的個數,將總個數減去不合法個數得到答案
我們可以枚舉一個最短回文後綴,記長度為i,則前面n-i任意選,即使產生新回文也行,長度都比i大,則方案是sn−i∗f[i](2<=i<=n)s^{n-i}*f[i](2<=i<=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的更多相关文章
随机推荐
- 如何在C#中自定义自己的异常
在C#中所有的异常类型都继承自System.Exception,也就是说,System.Exception是所有异常类的基类. 总起来说,其派生类分为两种:1. SystemException类: 所 ...
- python如何查看有哪些模块
Question: 如何查看正则表达式模块re及其相关函数的意义 1.终端命令行下 python >> import sys >> sys.modules ########## ...
- laravel表单提交
1.控制器->路由->视图 2.视图 3.控制器
- windows驱动
DriveEntry() 启动 停止 接口函数 驱动程序名 驱动程序版本号 异常处理 是否运行 声明LPOReceive类型的函数 声明函数指针(外部传进来的回调函数) 存放配置字符串 本机IP 串口 ...
- Javascript中escape()、encodeURI()、encodeURIComponent()的区别
JavaScript中有三个可以对字符串编码的函数,分别是: escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decod ...
- C# 编写最小化时隐藏为任务栏图标的Window appllication
1.设置窗体属性showinTask=false 2.加notifyicon控件notifyIcon1,为控件notifyIcon1的属性Icon添加一个icon图标. 3.添加窗体最小化事件(首先需 ...
- 2018.10.19 NOIP模拟 比特战争(kruskal)
传送门 考完发现是sbsbsb题啊. 直接考虑优化状压的转移. 可以证明最优解一定在求最小生成树的时候取得. 因此再最小生成树时维护一下连通块的最值统计答案就行了. 代码
- maven插件mybatis-generator生成代码
第一步,在pom中加入插件 <plugin> <groupId>org.mybatis.generator</groupId> <artifactId> ...
- 计算服务器的pv量算法
如何计算服务器能够承受多大的pv? 你想建设一个能承受500万PV/每天的网站吗? 500万PV是什么概念?服务器每秒要处理多少个请求才能应对?如果计算呢? PV是什么: PV是page view ...
- (能被11整除的数的特征)The shortest problem --hdu
链接: http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1005&cid=595 若一个整数的个位数字截去,再从余下的数中 ...