【BZOJ 2160】 拉拉队排练
【题目链接】
https://www.lydsy.com/JudgeOnline/problem.php?id=2160
【算法】
先简化题意 : 给定一个字符串,求最长的k个奇回文子串长度的乘积
先运行Manacher算法,对于每个位置i,我们知道以i为中心的回文串的最长半径为pi,那么i这个位置对半径为1-p[i]的回文串的个数都产生了1的”贡献“
因此,我们可以用差分求出任意半径的回文串个数,然后统计答案即可,注意要用快速幂
【代码】
#include<bits/stdc++.h>
using namespace std;
#define MAXN 1000010
const int P = ;
typedef long long ll; int i,len,n;
ll sum,ans,k;
int p[MAXN];
ll cnt[MAXN];
char s[MAXN]; inline ll power(ll a,ll n)
{
ll ans = ,b = a;
while (n)
{
if (n & ) ans = 1ll * ans * b % P;
n >>= ;
b = 1ll * b * b % P;
}
return ans;
} inline void Manacher()
{
int i,pos = ,mx = ;
for (i = ; i <= len; i++)
{
if (mx > i) p[i] = min(p[*pos-i],mx-i);
else p[i] = ;
while (i - p[i] >= && i + p[i] <= len && s[i-p[i]] == s[i+p[i]]) p[i]++;
if (i + p[i] - > mx)
{
mx = i + p[i] - ;
pos = i;
}
}
} int main()
{ scanf("%d%lld%s",&n,&k,s+);
len = strlen(s+);
Manacher();
for (i = ; i <= len; i++)
{
cnt[]++;
cnt[p[i]+]--;
}
for (i = ; i <= (len + ) / ; i++) cnt[i] += cnt[i-];
sum = ; ans = ;
for (i = (len + ) / ; i >= ; i--)
{
if (cnt[i] <= ) continue;
if (sum + cnt[i] < k)
{
sum += cnt[i];
ans = 1ll * ans * power(*i-,cnt[i]) % P;
} else
{
ans = 1ll * ans * power(*i-,k-sum) % P;
sum += cnt[i];
break;
}
}
if (sum < k) printf("-1\n");
else printf("%lld\n",ans); return ; }
【BZOJ 2160】 拉拉队排练的更多相关文章
- bzoj 2160: 拉拉队排练 回文自动机
题目: Description 艾利斯顿商学院篮球队要参加一年一度的市篮球比赛了.拉拉队是篮球比赛的一个看点,好的拉拉队往往能帮助球队增加士气,赢得最终的比赛.所以作为拉拉队队长的楚雨荨同学知道,帮助 ...
- BZOJ 2160: 拉拉队排练
Description 问长度前 \(k\) 大的奇长度回文子串的乘积. Sol Manacher. 直接马拉车跑一边,统计一下答案,每次将长度-2就可以了. Code /************** ...
- BZOJ 2160: 拉拉队排练(回文树)
传送门: [1]:BZOJ [2]:洛谷 •题意 求串 s 中出现的所有奇回文串,并按照长度由大到小排序: 输出前 k 个奇回文串的乘积 mod 19930726; 如果奇回文串的个数不足 k 个,输 ...
- BZOJ.2160.拉拉队排练(Manacher)
题目链接 \(Description\) 求给定字符串中 最长的k个回文串长度的乘积(要求回文串长度为奇数):若奇数长度回文串不足k个则输出-1.(len<=10^6,k<=10^12) ...
- 【BZOJ】2160: 拉拉队排练(Manacher)
题目 2160: 拉拉队排练 Description 艾利斯顿商学院篮球队要参加一年一度的市篮球比赛了.拉拉队是篮球比赛的一个看点,好的拉拉队往往能帮助球队增加士气,赢得最终的比赛.所以作为拉拉队队长 ...
- HYSBZ 2160 拉拉队排练(回文树)
2160: 拉拉队排练 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 825 Solved: 324 [Submit][Status][Discu ...
- 【BZOJ2160】拉拉队排练(回文树)
[BZOJ2160]拉拉队排练(回文树) 题面 BZOJ 题解 看着题目, 直接构建回文树 求出每个回文串的出现次数 直接按照长度\(sort\)一下就行了 然后快速幂算一下答案就出来了 这题貌似可以 ...
- 青橙 A1255. 拉拉队排练(陶文博)
A1255. 拉拉队排练(陶文博) 时间限制:1.0s 内存限制:512.0MB 总提交次数: AC次数: 平均分: 将本题分享到: 查看未格式化的试题 提交 ...
- BZOJ_2160_拉拉队排练_manacher
BZOJ_2160_拉拉队排练_manacher Description 艾利斯顿商学院篮球队要参加一年一度的市篮球比赛了.拉拉队是篮球比赛的一个看点,好的拉拉队往往能帮助球队增加士气,赢得最终的比赛 ...
- bzoj2160拉拉队排练
bzoj2160拉拉队排练 题意: 给一个字符串,求最长的k个回文子串(此处回文子串长度必须为奇数)长度的乘积.字符串长度≤1000000 题解: 先用manacher预处理出第i个字符为中心的最长回 ...
随机推荐
- mac系统,鼠标移动太慢
to check your speed: defaults read -g com.apple.mouse.scaling to set your speed defaults write -g co ...
- 第三节:执行一些EF的增删改查
针对两表操作 一丶增加 #region 05-增加操作 /// <summary> /// 05-增加操作 /// </summary> /// <param name= ...
- 牛客多校Round 2
Solved:3 rank:187 H.travel 题意:给一颗带有点权的树 找三条不相交的链 使得点权最大 题解:使用树形DP dp[x][i][0/1] 表示x节点选择i条链 有没有经过x的链 ...
- 网络编程 - 简单的socket例子
1.客户端 #客户端import socketclient=socket.socket() #生成socket连接对象client.connect(("localhost",696 ...
- Spring Boot 缓存的基本用法
目录 一.目的 二.JSR-107 缓存规范 三.Spring 缓存抽象 四.Demo 1.使用 IDEA 创建 Spring Boot 项目 2.创建相应的数据表 3.创建 Java Bean 封装 ...
- (转载)不错的CSS写法
根据微信订阅号“设计达人”推送的文章,学到了如题知识.个人尝试了一下,感觉还不错.原文链接:http://mp.weixin.qq.com/s/g9TyBwB9xIi45TGwTBOLSQ. 字体 从 ...
- 管理Bean的生命周期
[IOC容器中Bean的生命周期方法] 1.SpringIOC容器可以管理Bean的生命周期,Spring允许在Bean生命周期的特定点执行定制的任务. 2.Spring IOC容器对Bean的生命周 ...
- 【19】AngularJS 应用
AngularJS 应用 现在是时候创建一个真正的 AngularJS 单页 Web 应用(single page web application,SPA)了. AngularJS 应用实例 现在可以 ...
- [luoguP1282] 多米诺骨牌(DP + 背包)
传送门 将问题转换成分组背包,每一组有上下两个,每一组中必须选则一个,上面的价值为0,下面的价值为1,求价值最小 因为要求上下两部分差值最小,只需从背包大小为总数 / 2 时往前枚举,找最小答案即可. ...
- noip模拟赛 天天和不可描述
分析:直接就这么翻肯定是不行的,换一种想法:有括号就是把括号里的字符串倒着输出,如果在括号里又遇到了括号就继续倒着输出,相当于递归. 我们可以用递归直接做,也可以用一层循环搞定,每次从左括号跳到右括号 ...