A1255. 拉拉队排练(陶文博)
时间限制:1.0s   内存限制:512.0MB  
总提交次数:   AC次数:   平均分:
 
将本题分享到:
      
试题来源
  2011中国国家集训队命题答辩
问题描述
  艾利斯顿商学院篮球队要参加一年一度的市篮球比赛了。拉拉队是篮球比赛的一个看点,好的拉拉队往往能帮助球队增加士气,赢得最终的比赛。所以作为拉拉队队长的楚雨荨同学知道,帮助篮球队训练好拉拉队有多么的重要。
  拉拉队的选拔工作已经结束,在雨荨和校长的挑选下,n集优秀的身材、舞技于一体的美女从众多报名的女生中脱颖而出。这些女生将随着篮球队的小伙子们一起,和对手抗衡,为艾利斯顿篮球队加油助威。
  一个阳光明媚的早晨,雨荨带领拉拉队的队员们开始了排练。n个女生从左到右排成一行,每个人手中都举了一个写有26个小写字母中的某一个的牌子,在比赛的时候挥舞,为小伙子们呐喊、加油。
  雨荨发现,如果连续的一段女生,有奇数个,并且他们手中的牌子所写的字母,从左到右和从右到左读起来一样,那么这一段女生就被称作和谐小群体
  现在雨荨想找出所有和谐小群体,并且按照女生的个数降序排序之后,K和谐小群体的女生个数的乘积是多少。由于答案可能很大,雨荨只要你告诉她,答案除以19930726的余数是多少就行了。
输入格式
  输入为标准输入。
  第一行为两个正整数nK,代表的东西在题目描述中已经叙述。
  接下来一行为n个字符,代表从左到右女生拿的牌子上写的字母。
输出格式
  输出为标准输出。
  输出一个整数,代表题目描述中所写的乘积除以19930726的余数,如果总的和谐小群体个数小于K,输出一个整数-1。
样例输入
5 3
ababa
样例输出
45
样例说明
  和谐小群体女生所拿牌子上写的字母从左到右按照女生个数降序排序后为ababa, aba, aba, bab, a, a, a, b, b,前三个长度的乘积为 。
数据规模和约定
  总共20个测试点,数据范围满足:

测试点 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. 拉拉队排练(陶文博)的更多相关文章

  1. 【BZOJ2160】拉拉队排练(回文树)

    [BZOJ2160]拉拉队排练(回文树) 题面 BZOJ 题解 看着题目, 直接构建回文树 求出每个回文串的出现次数 直接按照长度\(sort\)一下就行了 然后快速幂算一下答案就出来了 这题貌似可以 ...

  2. 【BZOJ】2160: 拉拉队排练(Manacher)

    题目 2160: 拉拉队排练 Description 艾利斯顿商学院篮球队要参加一年一度的市篮球比赛了.拉拉队是篮球比赛的一个看点,好的拉拉队往往能帮助球队增加士气,赢得最终的比赛.所以作为拉拉队队长 ...

  3. HYSBZ 2160 拉拉队排练(回文树)

    2160: 拉拉队排练 Time Limit: 10 Sec  Memory Limit: 259 MB Submit: 825  Solved: 324 [Submit][Status][Discu ...

  4. 青橙 A1280. 最长双回文串

    A1280. 最长双回文串 时间限制:2.0s   内存限制:512.0MB   总提交次数:   AC次数:   平均分:   将本题分享到:        查看未格式化的试题   提交   试题讨 ...

  5. BZOJ_2160_拉拉队排练_manacher

    BZOJ_2160_拉拉队排练_manacher Description 艾利斯顿商学院篮球队要参加一年一度的市篮球比赛了.拉拉队是篮球比赛的一个看点,好的拉拉队往往能帮助球队增加士气,赢得最终的比赛 ...

  6. 青橙 M4 解锁BootLoader 并刷入recovery ROOT

    首先下载工具链接:https://pan.baidu.com/s/1o9xzTEi密码:7s7a 备用连接:https://pan.baidu.com/s/1bq47TMn 本篇教程教你如何傻瓜式解锁 ...

  7. 【青橙商城-管理后台开发】3. web模块搭建

    [青橙商城-管理后台开发]3. web模块搭建 1.创建qingcheng_web_manager模块 pom.xml <?xml version="1.0" encodin ...

  8. bzoj2160拉拉队排练

    bzoj2160拉拉队排练 题意: 给一个字符串,求最长的k个回文子串(此处回文子串长度必须为奇数)长度的乘积.字符串长度≤1000000 题解: 先用manacher预处理出第i个字符为中心的最长回 ...

  9. BZOJ2160拉拉队排练——回文自动机

    题目描述 艾利斯顿商学院篮球队要参加一年一度的市篮球比赛了.拉拉队是篮球比赛的一个看点,好的拉拉队往往能帮助球队增加士气,赢得最终的比赛.所以作为拉拉队队长的楚雨荨同学知道,帮助篮球队训练好拉拉队有多 ...

随机推荐

  1. c# 设置水印,消除水印

    方案1: 图像处理 opencv etc 方案2: 开源框架,直接使用,已经优化 https://github.com/itext/itextsharp https://github.com/itex ...

  2. 火星坐标、百度坐标、WGS84坐标转换代码(JS)

    JS版本源码 /** * Created by Wandergis on 2015/7/8. * 提供了百度坐标(BD09).国测局坐标(火星坐标,GCJ02).和WGS84坐标系之间的转换 */ / ...

  3. java 多线程系列基础篇(九)之interrupt()和线程终止方式

    1. interrupt()说明 在介绍终止线程的方式之前,有必要先对interrupt()进行了解.关于interrupt(),java的djk文档描述如下:http://docs.oracle.c ...

  4. Spring注解-TaskScheduler

    一.定义配置类 import org.springframework.context.annotation.ComponentScan; import org.springframework.cont ...

  5. Class类动态加载类的用法

    编译时刻加载类出现的问题:一个功能有错,所有功能都用不了 动态加载类:

  6. Oracle之DBMS_SQL包用法详解

    对于一般的(select)操作,如果使用动态的sql语句则需要进行以下几个步骤:open  cursor--->parse---> bind  variable  ---> defi ...

  7. 解决列表中增加字典覆盖之前相同key的字典

    dic = {} lst = [] # 先声明一个字典和一个列表 dic['name'] = "chenrun" lst.append(dic) print(lst) dic[&q ...

  8. HTML5的头部、拨号、短信、邮件(转)

    HTML5[语法要点] 一.头部设置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 <!--页面窗口自动调整到设备 ...

  9. 在html中打开PDF

    <object classid="clsid:CA8A9780-280D-11CF-A24D-444553540000" width="990" heig ...

  10. SpringBoot10 整合JSP

    1 整合JSP 1.1 导入相关依赖 JSP依赖.JSTL依赖 <?xml version="1.0" encoding="UTF-8"?> < ...