BZOJ.2160.拉拉队排练(Manacher)
\(Description\)
求给定字符串中 最长的k个回文串长度的乘积(要求回文串长度为奇数);若奇数长度回文串不足k个则输出-1.(len<=106,k<=1012)
\(Solution\)
只计算奇数长度的回文串,于是不需要在每两个之间加入字符,只需在字符串首尾添加字符。
对于每个位置计算出ex[i] (回文半径),那么就有1~i+ex[i] (中的奇数)长度的回文串,需要计数即区间+1
由于只需要最后得到cnt[]数组(对应长度回文串的个数),可以将区间加差分,最后前缀和。
从大到小枚举长度 逐个乘就好了
//13516kb 220ms
#include <cstdio>
#include <algorithm>
#define rg register
#define mod 19930726
typedef long long LL;
const int N=1e6+7;
int n,ex[N];
LL K,cnt[N];
char s[N];
void Manacher()
{
int mx=0,id;
for(int i=1; i<=n; ++i)
{
if(i<mx) ex[i]=std::min(ex[2*id-i],mx-i);
else ex[i]=1;
while(s[i-ex[i]]==s[i+ex[i]]) ++ex[i];
if(i+ex[i]>mx) mx=i+ex[id=i];
--cnt[2*ex[i]];
}
// for(int i=1; i<=n; ++i) printf("%d ",ex[i]);putchar('\n');
}
LL FP(LL x,int k)
{
LL t=1;
for(; k; k>>=1,x=x*x%mod)
if(k&1) t=t*x%mod;
return t;
}
int main()
{
scanf("%d%lld%s",&n,&K,s+1);
s[0]='$', s[n+1]='%', Manacher();
cnt[1]=n;
for(int i=2; i<=n; ++i) cnt[i]+=cnt[i-1];
// for(int i=1; i<=n; ++i) printf("%I64d ",cnt[i]);putchar('\n');
LL res=1;
for(int i=n&1?n:n-1; i>0; i-=2)
if(cnt[i])
if(K>cnt[i]) res=res*FP(i,cnt[i])%mod, K-=cnt[i];
else {res=res*FP(i,K)%mod, K=0; break;}
if(K) printf("-1");
else printf("%lld",res);
return 0;
}
BZOJ.2160.拉拉队排练(Manacher)的更多相关文章
- BZOJ 2160: 拉拉队排练
Description 问长度前 \(k\) 大的奇长度回文子串的乘积. Sol Manacher. 直接马拉车跑一边,统计一下答案,每次将长度-2就可以了. Code /************** ...
- bzoj 2160: 拉拉队排练 回文自动机
题目: Description 艾利斯顿商学院篮球队要参加一年一度的市篮球比赛了.拉拉队是篮球比赛的一个看点,好的拉拉队往往能帮助球队增加士气,赢得最终的比赛.所以作为拉拉队队长的楚雨荨同学知道,帮助 ...
- BZOJ 2160: 拉拉队排练(回文树)
传送门: [1]:BZOJ [2]:洛谷 •题意 求串 s 中出现的所有奇回文串,并按照长度由大到小排序: 输出前 k 个奇回文串的乘积 mod 19930726; 如果奇回文串的个数不足 k 个,输 ...
- 【BZOJ】2160: 拉拉队排练(Manacher)
题目 2160: 拉拉队排练 Description 艾利斯顿商学院篮球队要参加一年一度的市篮球比赛了.拉拉队是篮球比赛的一个看点,好的拉拉队往往能帮助球队增加士气,赢得最终的比赛.所以作为拉拉队队长 ...
- HYSBZ 2160 拉拉队排练(回文树)
2160: 拉拉队排练 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 825 Solved: 324 [Submit][Status][Discu ...
- BZOJ2160:拉拉队排练(Manacher)
Description 艾利斯顿商学院篮球队要参加一年一度的市篮球比赛了.拉拉队是篮球比赛的一个看点,好的拉拉队往往能帮助球队增加士气,赢得最终的比赛.所以作为拉拉队队长的楚雨荨同学知道,帮助篮球队训 ...
- [国家集训队] 拉拉队排练 - Manacher
用 Manacher 跑出回文串长,注意这里不需要偶数长度所以不需要对串做一些奇怪的处理 然后用前缀和搞一下,计算答案时跑快速幂即可 #include <bits/stdc++.h> us ...
- luoguP1659 [国际集训队]拉拉队排练 manacher算法
直接统计长度为$i$的回文子串有多少个 然后倒叙枚举长度,快速幂统计一下即可 复杂度$O(n \log n)$ #include <cstdio> #include <cstring ...
- 【BZOJ2160】拉拉队排练(回文树)
[BZOJ2160]拉拉队排练(回文树) 题面 BZOJ 题解 看着题目, 直接构建回文树 求出每个回文串的出现次数 直接按照长度\(sort\)一下就行了 然后快速幂算一下答案就出来了 这题貌似可以 ...
随机推荐
- volatile的深入理解--【sky原创】
volatile 所有定义的变量都是在内存上面的, 例如: int i = 10; int j = i; int k = i; i = 10; 是初始化的变量,存放在数据段,未初始化的变量存放在 ...
- springboot系列七:springboot 集成 MyBatis、事物配置及使用、druid 数据源、druid 监控使用
一.MyBatis和druid简介 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.M ...
- Websphere MQ Cluster
大纲: 1.什么是集群 2.建立一个基本的集群 3.DISPLAY命令 4.负载均衡 5.高级配置和管理 6.答疑 7.关于文章.红宝书等 一. 什么是集群 集群就是Websphere M ...
- python脚本发送邮件
#!/usr/bin/python #_*_ coding:utf-8 _*_ from email.MIMEText import MIMEText from email.MIMEMultipart ...
- TortoiseSVN常用配置
在Windows下推荐使用乌龟(Tortoise)SVN客户端. TortoiseSVN 是 Subversion 版本控制系统的一个免费开源客户端,可以超越时间的管理文件和目录. 文件保存在中央版本 ...
- 升级tomcat需要更改哪些配置?
1.上传Tomcatapache-tomcat-7.0.84.zip将38服务器上的Tomcat传到107服务器指定目录:scp /data/apache-tomcat-7.0.84.zip jsdx ...
- redis拾趣(客户端连接,keys命令,数据备份,缓存有效期等)
1.客户端连接 为了安全保护,redis支持绑定IP跟端口,这个通过conf配置文件中的bind跟port来设置. 绑定后登录client控制台时就需要写明ip(或者hostname)跟端口了,如: ...
- saltstack自动化运维系列④之saltstack的命令返回结果mysql数据库写入
saltstack自动化运维系列④之saltstack的命令返回结果mysql数据库写入salt的返回值写入mysql数据库:可参考:https://docs.saltstack.com/en/lat ...
- UDP template 代码
服务端 from socket import * import json,struct client= socket(AF_INET,SOCK_STREAM) client.connect(('127 ...
- 【linux】centos6.9安装gearman
1.确认yum源没问题,如果有问题,参照这里更换 2. yum install -y boost-devel gperf libevent-devel libuuid-devel yum instal ...