[manacher]拉拉队排练
题目描述
艾利斯顿商学院篮球队要参加一年一度的市篮球比赛了。拉拉队是篮球比赛的一个看点,好的拉拉队往往能帮助球队增加士气,赢得最终的比赛。所以作为拉拉队队长的楚雨荨同学知道,帮助篮球队训练好拉拉队有多么的重要。
拉拉队的选拔工作已经结束,在雨荨和校长的挑选下,n位集优秀的身材、舞技于一体的美女从众多报名的女生中脱颖而出。这些女生将随着篮球队的小伙子们一起,和对手抗衡,为艾利斯顿篮球队加油助威。
一个阳光明媚的早晨,雨荨带领拉拉队的队员们开始了排练。n个女生从左到右排成一行,每个人手中都举了一个写有26个小写字母中的某一个的牌子,在比赛的时候挥舞,为小伙子们呐喊、加油。
雨荨发现,如果连续的一段女生,有奇数个,并且他们手中的牌子所写的字母,从左到右和从右到左读起来一样,那么这一段女生就被称作和谐小群体。
现在雨荨想找出所有和谐小群体,并且按照女生的个数降序排序之后,前K个和谐小群体的女生个数的乘积是多少。由于答案可能很大,雨荨只要你告诉她,答案除以19930726的余数是多少就行了。
Input
输入为标准输入。
第一行为两个正整数n和K,代表的东西在题目描述中已经叙述。
接下来一行为n个字符,代表从左到右女生拿的牌子上写的字母。
Output
输出为标准输出。
输出一个整数,代表题目描述中所写的乘积除以19930726的余数,如果总的和谐小群体个数小于K,输出一个整数-1。
Sample Input
5 3
ababa
Sample Output
45
n≤10^6 k≤10^12
分析
求回文串,典型manacher
利用len数组的重合(大的包含以下所有奇数串)
可以跑一个前缀和,利用前缀和下标和数量跑快速幂得出结果(不要问为什么用快速幂)
#include <iostream>
#include <cstdio>
#define rep(i,a,b) for (i=a;i<=b;i++)
#define q 19930726
using namespace std;
long long len[1000003],a[1000003];
string s;
int n;
long long k;
void INIT()
{scanf("%d%lld\n",&n,&k);s="";s+='$';int i;char c;rep(i,1,n){scanf("%c",&c);s+=c;}s+='#';n+=2;
}void MANACHER(string s)
{int mx=0,i,j,id=0;rep(i,0,n-1){j=id*2-i;if (i<mx)len[i]=min(len[j],(long long)mx-i);else len[i]=1;while (s[i-len[i]]==s[i+len[i]])len[i]++;if (i+len[i]>mx){id=i;mx=i+len[i];}}
}long long GET_POWER(long long x,long long r)
{long long ans=1;while (r){if (r&1) ans=ans*x%q;x=x*x%q;r>>=1;}return ans;
}long long GET_SUM()
{int i,mx=0;long long x;long long ans=1;rep(i,1,n-2)a[len[i]*2-1]++,mx=max((long long)mx,len[i]*2-1);for (i=mx-2;i>=1;i--)a[i]+=a[i+2];while(mx>0&&k>0){x=a[mx]>k?k:a[mx];ans=ans*GET_POWER(mx,x)%q;mx--;k-=x;}return ans;
}int main()
{INIT();MANACHER(s);printf("%lld",GET_SUM());
}
[manacher]拉拉队排练相关推荐
- bzoj 2160: 拉拉队排练
2160: 拉拉队排练 Time Limit: 10 Sec Memory Limit: 259 MB [Submit][Status][Discuss] Description 艾利斯顿商学院篮球 ...
- BZOJ 2160 拉拉队排练
2160: 拉拉队排练 Description 艾利斯顿商学院篮球队要参加一年一度的市篮球比赛了.拉拉队是篮球比赛的一个看点,好的拉拉队往往能帮助球队增加士气,赢得最终的比赛.所以作为拉拉队队长的楚雨 ...
- BZOJ2160:拉拉队排练(Manacher)
Description 艾利斯顿商学院篮球队要参加一年一度的市篮球比赛了.拉拉队是篮球比赛的一个看点,好的拉拉队往往能帮助球队增加士气,赢得最终的比赛.所以作为拉拉队队长的楚雨荨同学知道,帮助篮球队训 ...
- 【洛谷 P1659】 [国家集训队]拉拉队排练(manacher)
题目链接 马拉车+简单膜你 #include <cstdio> #include <cstring> #include <algorithm> using name ...
- P1659 [国家集训队]拉拉队排练
题目描述 艾利斯顿商学院篮球队要参加一年一度的市篮球比赛了.拉拉队是篮球比赛的一个看点,好的拉拉队往往能帮助球队增加士气,赢得最终的比赛.所以作为拉拉队队长的楚雨荨同学知道,帮助篮球队训练好拉拉队有多 ...
- [回文树][BZOJ2160][国家集训队]拉拉队排练
Description 艾利斯顿商学院篮球队要参加一年一度的市篮球比赛了.拉拉队是篮球比赛的一个看点,好的拉拉队往往能帮助球队增加士气,赢得最终的比赛.所以作为拉拉队队长的楚雨荨同学知道,帮助篮球队训 ...
- 题解报告——拉拉队排练
题目传送门 题目描述 艾利斯顿商学院篮球队要参加一年一度的市篮球比赛了.拉拉队是篮球比赛的一个看点,好的拉拉队往往能帮助球队增加士气,赢得最终的比赛.所以作为拉拉队队长的楚雨荨同学知道,帮助篮球队训练 ...
- luogu P1659 [国家集训队]拉拉队排练
唔....话说好久没有发布题解了(手痒痒了 首先特别鸣谢lykkk大佬今天下午教我Manacher算法,甚是感谢 为了体现学习成果,写一篇蒟蒻版的题解(大佬勿喷 言归正传 题面-->在这儿 首先 ...
- [ BZOJ 2160 ] 拉拉队排练
\(\\\) \(Description\) 一个由小写字母构成的长为\(N\)的字符串,求前\(K\)长的奇数长度回文子串长度之积,对\(19930726\)取模后的答案. \(N\in [1,10 ...
最新文章
- 去除菜单项的加速键--‘’符号
- [leetcode] Bulb Switcher
- Codeforces Round #555 (Div. 3) AB
- WinFrom下Webbrowser加载自定义页面的技巧
- STM32F0使用LL库实现DMA方式AD采集
- 冠状病毒过后世界九大未来预测
- 子系统单点登录配置说明
- 关于div中图片水平垂直居中的问题
- 《Linux命令行与shell脚本编程大全》第十八章 图形化桌面环境中的脚本编程
- IE漏洞被黑客利用,导致全球上万个网站受害
- 海康摄像头直连电脑修改IP解决播放失败无画面无法连接问题
- 软件需求说明书/ 概要设计说明书/项目开发计划/详细设计说明书模版(说明要点及要点解释)
- 手游天龙八部服务器注册上限,腾讯手游助手注册已达上限怎么办 | 手游网游页游攻略大全...
- iTunes 给iPhone制作铃声
- 带南海九段线分位数地图可视化(R语言版)
- SCANV团队预警libsys图书馆系统注入漏洞
- linux下分析webmail代码,十分钟快速架设Linux系统下WebMail
- 将Google Analytics for Firebase数据导入BigQuery
- 显示器是微型计算机必须配置的一,高职单招计算机基础练习题
- MACD指标使用的一些小技巧