青橙 A1255. 拉拉队排练(陶文博)
拉拉队的选拔工作已经结束,在雨荨和校长的挑选下,n位集优秀的身材、舞技于一体的美女从众多报名的女生中脱颖而出。这些女生将随着篮球队的小伙子们一起,和对手抗衡,为艾利斯顿篮球队加油助威。
一个阳光明媚的早晨,雨荨带领拉拉队的队员们开始了排练。n个女生从左到右排成一行,每个人手中都举了一个写有26个小写字母中的某一个的牌子,在比赛的时候挥舞,为小伙子们呐喊、加油。
雨荨发现,如果连续的一段女生,有奇数个,并且他们手中的牌子所写的字母,从左到右和从右到左读起来一样,那么这一段女生就被称作和谐小群体。
现在雨荨想找出所有和谐小群体,并且按照女生的个数降序排序之后,前K个和谐小群体的女生个数的乘积是多少。由于答案可能很大,雨荨只要你告诉她,答案除以19930726的余数是多少就行了。
第一行为两个正整数n和K,代表的东西在题目描述中已经叙述。
接下来一行为n个字符,代表从左到右女生拿的牌子上写的字母。
输出一个整数,代表题目描述中所写的乘积除以19930726的余数,如果总的和谐小群体个数小于K,输出一个整数-1。
ababa
| 测试点 | n | K |
| 1 | 10 | 10 |
| 2 | 100 | 100 |
| 3 | 100 | 100 |
| 4 | 1,000 | 1,000 |
| 5 | 1,000 | 1,000 |
| 6 | 1,000 | 1,000 |
| 7 | 1,000 | 1,000 |
| 8 | 100,000 | = 1 |
| 9 | 100,000 | 100,000 |
| 10 | 100,000 | 100,000 |
| 11 | 100,000 | 100,000 |
| 12 | 100,000 | 1,000,000,000,000 |
| 13 | 100,000 | 1,000,000,000,000 |
| 14 | 100,000 | 1,000,000,000,000 |
| 15 | 500,000 | 1,000,000,000,000 |
| 16 | 500,000 | 1,000,000,000,000 |
| 17 | 500,000 | 1,000,000,000,000 |
| 18 | 1,000,000 | = 1 |
| 19 | 1,000,000 | 1,000,000 |
| 20 | 1,000,000 | 1,000,000,000,000 |
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 1000010
#define mod 19930726
using namespace std;
char s[maxn];
int fail[maxn],nxt[maxn][],str[maxn],len[maxn],cnt[maxn],sz=-,last,n;
int creat(int l){
len[++sz]=l;
return sz;
}
void prepare(){
creat();
creat(-);
last=;
str[]=str[]=-;
fail[]=;
}
int getfail(int x){
while(str[n-len[x]-]!=str[n])x=fail[x];
return x;
}
void Insert(int c){
str[++n]=c;
int cur=getfail(last),now;
if(!nxt[cur][c]){
now=creat(len[cur]+);
fail[now]=nxt[getfail(fail[cur])][c];
nxt[cur][c]=now;
}
last=nxt[cur][c];
cnt[last]++;
}
void count(){
for(int i=sz;i>=;i--)cnt[fail[i]]+=cnt[i];
}
struct node{
int v,num;
bool operator < (const node &b)const{
return v>b.v;
}
}a[maxn];
int tot;
long long Pow(int x,int y){
long long res=;
while(y){
if(y&)res=res*x%mod;
x=1LL*x*x%mod;
y>>=;
}
return res;
}
int main(){
prepare();
long long k;cin>>k>>k;
scanf("%s",s);
int l=strlen(s);
for(int i=;i<l;i++)Insert(s[i]-'a');
count();
for(int i=;i<=l+;i++){
if(len[i]%==)continue;
tot++;
a[tot].v=len[i];a[tot].num=cnt[i];
}
sort(a+,a+tot+);
long long sum=,ans=;
bool flag=;
for(int i=;i<=tot;i++){
if(sum+a[i].num>k){
ans=ans*Pow(a[i].v,k-sum)%mod;
flag=;
break;
}
ans=ans*Pow(a[i].v,a[i].num)%mod;
sum+=a[i].num;
}
if(!flag)puts("-1");
else cout<<ans;
return ;
}
青橙 A1255. 拉拉队排练(陶文博)的更多相关文章
- 【BZOJ2160】拉拉队排练(回文树)
[BZOJ2160]拉拉队排练(回文树) 题面 BZOJ 题解 看着题目, 直接构建回文树 求出每个回文串的出现次数 直接按照长度\(sort\)一下就行了 然后快速幂算一下答案就出来了 这题貌似可以 ...
- 【BZOJ】2160: 拉拉队排练(Manacher)
题目 2160: 拉拉队排练 Description 艾利斯顿商学院篮球队要参加一年一度的市篮球比赛了.拉拉队是篮球比赛的一个看点,好的拉拉队往往能帮助球队增加士气,赢得最终的比赛.所以作为拉拉队队长 ...
- HYSBZ 2160 拉拉队排练(回文树)
2160: 拉拉队排练 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 825 Solved: 324 [Submit][Status][Discu ...
- 青橙 A1280. 最长双回文串
A1280. 最长双回文串 时间限制:2.0s 内存限制:512.0MB 总提交次数: AC次数: 平均分: 将本题分享到: 查看未格式化的试题 提交 试题讨 ...
- BZOJ_2160_拉拉队排练_manacher
BZOJ_2160_拉拉队排练_manacher Description 艾利斯顿商学院篮球队要参加一年一度的市篮球比赛了.拉拉队是篮球比赛的一个看点,好的拉拉队往往能帮助球队增加士气,赢得最终的比赛 ...
- 青橙 M4 解锁BootLoader 并刷入recovery ROOT
首先下载工具链接:https://pan.baidu.com/s/1o9xzTEi密码:7s7a 备用连接:https://pan.baidu.com/s/1bq47TMn 本篇教程教你如何傻瓜式解锁 ...
- 【青橙商城-管理后台开发】3. web模块搭建
[青橙商城-管理后台开发]3. web模块搭建 1.创建qingcheng_web_manager模块 pom.xml <?xml version="1.0" encodin ...
- bzoj2160拉拉队排练
bzoj2160拉拉队排练 题意: 给一个字符串,求最长的k个回文子串(此处回文子串长度必须为奇数)长度的乘积.字符串长度≤1000000 题解: 先用manacher预处理出第i个字符为中心的最长回 ...
- BZOJ2160拉拉队排练——回文自动机
题目描述 艾利斯顿商学院篮球队要参加一年一度的市篮球比赛了.拉拉队是篮球比赛的一个看点,好的拉拉队往往能帮助球队增加士气,赢得最终的比赛.所以作为拉拉队队长的楚雨荨同学知道,帮助篮球队训练好拉拉队有多 ...
随机推荐
- Linux测试程序 - 多线程
#include <sched.h> #include <pthread.h> main(){ pthread_t id0, id1, id2; ret=pthread_cre ...
- 最新版CocoaPods的安装流程
1.移除现有Ruby默认源 $gem sources --remove https://rubygems.org/ 2.使用新的源 $gem sources -a https://ruby.taoba ...
- STL容器迭代器失效问题讨论
STL源码剖析---迭代器失效小结 vector迭代器的几种失效的情况: .当插入(push_back)一个元素后,end操作返回的迭代器肯定失效. .当插入(push_back)一个元素后,capa ...
- ORA-04098 trigger 'DBBJ.DB_EV_ALTER_ST_METADATA' is invalid and failed re-validation
转自:https://blog.csdn.net/dragoo1/article/details/9411105 ORA-04098: trigger 'DBBJ.DB_EV_ALTER_ST_MET ...
- oracle 调整输出的列宽、行宽
调整列宽 col 列名 format a20 调整行宽 set linesize 150
- windows 获取本机(全部)IPv4、IPv6、MAC地址方法 (C/C++)
windows下获取IP地址的两种方法: 一种可以获取IPv4和IPv6,但是需要WSAStartup: 一种只能取到IPv4,但是不需要WSAStartup: 如下: 方法一:(可以获取IPv4和I ...
- c#循环语句 for 循环嵌套的练习。还有跳转语句,异常语句,迭代穷举介绍
先说一下循环嵌套:循环嵌套就是再一个循环里面再放一个循环,也就是说如果没一个循环都循环10次,那么第一个循环是1的时候,嵌套的循环会循环十次.也就是10*10的效果. for 循环语句 主要还是逻辑思 ...
- IOS UITableView分组与索引分区实例
#import <UIKit/UIKit.h> @interface AppDelegate : UIResponder <UIApplicationDelegate> @pr ...
- Boost中实现线程安全
博客转载自: http://www.cnblogs.com/lvdongjie/p/4447142.html 1 boost原子变量和线程 #include <boost/thread.hpp& ...
- css选择器的一些说明
标签选择器.ID选择器.类选择器 这三个很简单,没啥可说的. 子选择器得说一下. <ul class="food"> <li>水果 &l ...