BZOJ 2160: 拉拉队排练(回文树)
传送门:
[1]:BZOJ
[2]:洛谷
•题意
求串 s 中出现的所有奇回文串,并按照长度由大到小排序;
输出前 k 个奇回文串的乘积 mod 19930726;
如果奇回文串的个数不足 k 个,输出 -1;
•题解
将串 s 跑一边回文自动机;
将求解出的 len,cnt 数组存入一个结构体中并按照 len 由大到小排序;
将前 k 个奇回文串的长度相乘就行;
记得用快速幂,并且只要奇回文串的长度乘积;
•Code
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int MOD=;
const int maxn=1e6+; int n;
ll k;
char s[maxn]; struct PAM
{
int tot;
int last;
ll cnt[maxn];
ll len[maxn];
int fail[maxn];
int son[maxn][]; int newNode(int Len)
{
for(int i=;i < ;++i)
son[tot][i]=; len[tot]=Len;
fail[tot]=;
cnt[tot]=; return tot++;
}
int getFail(int p,int i)
{
while(s[i-len[p]-] != s[i])
p=fail[p];
return p;
}
void Init()
{
tot=;
last=; newNode();
newNode(-); fail[]=;
}
void Count()
{
for(int i=tot-;i >= ;--i)
cnt[fail[i]] += cnt[i];
}
void pam()
{
Init(); for(int i=;i <= n;++i)
{
s[i]=s[i]-'a'+; int cur=getFail(last,i); if(!son[cur][s[i]])
{
int now=newNode(len[cur]+);
fail[now]=son[getFail(fail[cur],i)][s[i]];
son[cur][s[i]]=now; }
cnt[last=son[cur][s[i]]]++;
}
Count();
}
}_pam;
struct Data
{
ll cnt;
ll len;
bool operator < (const Data &obj) const
{
return len > obj.len;
}
}a[maxn]; ll qPow(ll a,ll b,ll m)
{
ll ans=;
a %= m;
while(b)
{
if(b&)
ans=ans*a%m;
a=a*a%m;
b >>= ;
}
return ans;
}
int main()
{
scanf("%d%lld",&n,&k);
scanf("%s",s+);
s[]='#'; _pam.pam(); int x=;
for(int i=;i < _pam.tot;i++)
a[++x]=Data{_pam.cnt[i],_pam.len[i]}; sort(a+,a+x+); int index=;
ll ans=;
while(index <= x)
{
if(!(a[index].len&))///坑:如果不是奇回文串,continue
{
index++;
continue;
} ll cur=min(k,a[index].cnt); ans *= qPow(a[index++].len,cur,MOD);
ans %= MOD;
k -= cur; if(k == )
break;
}
if(k > )
ans=-; printf("%lld\n",ans);
}
BZOJ 2160: 拉拉队排练(回文树)的更多相关文章
- bzoj 2160: 拉拉队排练 回文自动机
题目: Description 艾利斯顿商学院篮球队要参加一年一度的市篮球比赛了.拉拉队是篮球比赛的一个看点,好的拉拉队往往能帮助球队增加士气,赢得最终的比赛.所以作为拉拉队队长的楚雨荨同学知道,帮助 ...
- BZOJ2160拉拉队排练——回文自动机
题目描述 艾利斯顿商学院篮球队要参加一年一度的市篮球比赛了.拉拉队是篮球比赛的一个看点,好的拉拉队往往能帮助球队增加士气,赢得最终的比赛.所以作为拉拉队队长的楚雨荨同学知道,帮助篮球队训练好拉拉队有多 ...
- BZOJ 2160: 拉拉队排练
Description 问长度前 \(k\) 大的奇长度回文子串的乘积. Sol Manacher. 直接马拉车跑一边,统计一下答案,每次将长度-2就可以了. Code /************** ...
- BZOJ.2160.拉拉队排练(Manacher)
题目链接 \(Description\) 求给定字符串中 最长的k个回文串长度的乘积(要求回文串长度为奇数):若奇数长度回文串不足k个则输出-1.(len<=10^6,k<=10^12) ...
- 【BZOJ2342】双倍回文(回文树)
[BZOJ2342]双倍回文(回文树) 题面 BZOJ 题解 构建出回文树之后 在\(fail\)树上进行\(dp\) 如果一个点代表的回文串长度为\(4\)的倍数 并且存在长度为它的一半的回文后缀 ...
- HYSBZ 2160 拉拉队排练(回文树)
2160: 拉拉队排练 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 825 Solved: 324 [Submit][Status][Discu ...
- 【BZOJ2160】拉拉队排练(回文树)
[BZOJ2160]拉拉队排练(回文树) 题面 BZOJ 题解 看着题目, 直接构建回文树 求出每个回文串的出现次数 直接按照长度\(sort\)一下就行了 然后快速幂算一下答案就出来了 这题貌似可以 ...
- [回文树][BZOJ2160][国家集训队]拉拉队排练
题面 Description 艾利斯顿商学院篮球队要参加一年一度的市篮球比赛了.拉拉队是篮球比赛的一个看点,好的拉拉队往往能帮助球队增加士气,赢得最终的比赛.所以作为拉拉队队长的楚雨荨同学知道,帮助篮 ...
- 【BZOJ】2160: 拉拉队排练(Manacher)
题目 2160: 拉拉队排练 Description 艾利斯顿商学院篮球队要参加一年一度的市篮球比赛了.拉拉队是篮球比赛的一个看点,好的拉拉队往往能帮助球队增加士气,赢得最终的比赛.所以作为拉拉队队长 ...
随机推荐
- 阿里工程师开发了一款免费工具,提升Kubernetes应用开发效率
对于使用了Kubernetes作为应用运行环境的开发者而言,在同一个集群中我们可以使用命名空间(Namespace)快速创建多套隔离环境,在相同命名空间下,服务间使用Service的内部DNS域名进行 ...
- 【机器学习PAI实战】—— 玩转人工智能之你最喜欢哪个男生?
摘要: 分类问题是生活中最常遇到的问题之一.普通人在做出选择之前,可能会犹豫不决,但对机器而言,则是唯一必选的问题.我们可以通过算法生成模型去帮助我们快速的做出选择,而且保证误差最小.充足的样本,合适 ...
- 微信小程序分析见解
前两天朋友圈都快被小程序给刷爆了: 对于小程序这方面, 由于没有公测的资格.所以翻阅了许许多多的资料,来了解一下小程序: 微信小程序: 小程序是一种不需要下载安装即可使用的应用,它实现了应用&quo ...
- Anaconda入门使用指南
打算学习 Python 来做数据分析的你,是不是在开始时就遇到各种麻烦呢? 到底该装 Python2 呢还是 Python3 ? 为什么安装 Python 时总是出错? 怎么安装工具包呢? 为什么提示 ...
- 并发编程之submit和execute区别
前言 使用线程池难免会用到submit和execute,但是submit是有坑的,此处做个记录 1.submit坑 此处随便写一个方法,进入内部查看execute和submit /** * @Auth ...
- Xcode10 import导入文件的坑
更新了10.0的Xcode,踩了两个坑,记录一下. #import "" 双引号内输入任何字符 都会导致Xcode崩溃 解决方案: target - buildSettings - ...
- SDUT-2107_图的深度遍历
数据结构实验之图论二:图的深度遍历 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 请定一个无向图,顶点编号从0到n-1 ...
- 干货 | 解读MySQL 8.0新特性:Skip Scan Range
MySQL从8.0.13版本开始支持一种新的range scan方式,称为Loose Skip Scan.该特性由Facebook贡献.我们知道在之前的版本中,如果要使用到索引进行扫描,条件必须满足索 ...
- 【NS2】各种TCP版本 之 TCP Tahoe 和 TCP Reno(转载)
实验目的 学习TCP的拥塞控制机制,并了解TCP Tahoe 和 TCP Reno的运行方式. 基础知识回顾 TCP/IP (Transmission Control Protocol/Interne ...
- SGU 101 Domino【欧拉路径】
题目链接: http://acm.sgu.ru/problem.php?contest=0&problem=101 题意: N个多米诺骨牌,每个骨牌左右两侧分别有一个0~6的整数(骨牌可以旋转 ...