[BZOJ2160]拉拉队排练(manacher+快速幂)
来源:互联网 发布:mac下载文件夹 dock 编辑:程序博客网 时间:2024/05/03 22:29
题目描述
传送门
题解
首先求出来所有的极长回文串的长度。
然后从大到小枚举长度,用快速幂计算同一个长度的答案,然后再这些回文串加到当前长度-2的里面去。
时间复杂度
代码
#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define LL long long#define Mod 19930726#define N 2000005char a[N],s[N];int la,n,id,mx,p[N],cnt[N];LL k,ans=1;int cmp(int a,int b){ return a>b;}LL fast_pow(LL a,int p){ LL ans=1; for (;p;p>>=1,a=a*a%Mod) if (p&1) ans=ans*a%Mod; return ans;}int main(){ scanf("%d%lld\n",&n,&k);gets(a);s[0]='*'; for (int i=0;i<n;++i) s[i+1]=a[i]; for (int i=1;i<=n;++i) { if (mx>i) p[i]=min(p[2*id-i],mx-i); else p[i]=1; while (s[i-p[i]]==s[i+p[i]]) ++p[i]; if (i+p[i]>mx) { mx=i+p[i]; id=i; } } for (int i=1;i<=n;++i) ++cnt[p[i]*2-1]; for (int i=n;i>=1;--i) if (cnt[i]) { if (cnt[i]<=k) { ans=ans*fast_pow((LL)i%Mod,cnt[i])%Mod; if (cnt[i-2]>=0) cnt[i-2]+=cnt[i]; k-=(LL)cnt[i]; } else { ans=ans*fast_pow((LL)i%Mod,k)%Mod; k=0; break; } } if (k>0) puts("-1"); else printf("%lld\n",ans);}
0 0
- [BZOJ2160]拉拉队排练(manacher+快速幂)
- [bzoj2160]拉拉队排练 manacher+快速幂
- 【bzoj2160】拉拉队排练 manacher
- BZOJ2160 拉拉队排练 [manacher][前缀]
- bzoj2160 拉拉队排练 manacher+差分
- bzoj 2160: 拉拉队排练 (manacher+前缀和+快速幂)
- [BZOJ]2160 拉拉队排练 Manacher+快速幂
- [BZOJ2160]拉拉队排练(回文树)
- bzoj2160: 拉拉队排练
- BZOJ2160: 拉拉队排练
- BZOJ2160 拉拉队排练
- bzoj2160 拉拉队排练
- bzoj2160 拉拉队排练
- bzoj2160 拉拉队排练
- BZOJ2160 拉拉队排练 解题报告【字符串】【Manacher】【差分】
- 【bzoj2160】【啦啦队排练】manacher(马拉车)+差分+快速幂
- BZOJ2160 拉拉队排练(回文树)
- BZOJ 2160: 拉拉队排练 manacher
- Java序列化技术性能分析(JDK原生与Protostuff)
- C 结构体与共用体的用法
- jQuery笔记——工具函数——缓存
- 6--QT 创建主窗口MainWindow
- 初识Spring Boot框架(二)之DIY一个Spring Boot的自动配置
- [BZOJ2160]拉拉队排练(manacher+快速幂)
- 深入理解Java虚拟机:运行时数据区域
- A Stochastic Bilevel Model for the Energy Hub Manager Problem
- 实数域FASTICA算法讲解及matlab源码
- Listener基础案例(二) --国际化
- git如何merge(合并)代码到另外的分支
- 解决Oracle死锁问题
- [BZOJ3790]神奇项链(manacher+贪心)
- PAT---A1042 Shuffling Machine (20)