建回文树,然后判断长度奇偶性,统计下来排序即可。

题目链接:http://www.tsinsen.com/ViewGProblem.page?gpid=A1255

By:大奕哥

 #include<bits/stdc++.h>
using namespace std;
const int N=1e6+;
const int M=;
const int mod=;
typedef long long ll;
ll qmod(ll a,ll b)
{
    ll ans=;
    while(b){
        if(b&)ans=ans*a%mod;
        b>>=;a=a*a%mod;
    }
    return ans;
}
struct good{
    int l,n;
    bool operator<(const good &b)const{
        return l>b.l;
    }
}a[N];
struct Palindromic_Tree{
    int nex[N][M];
    int fail[N];
    int cnt[N];
    int num[N];
    int len[N];
    int S[N];
    int last;
    int n,m;
    int p;
    
    int newnode(int l)
    {
        for(int i=;i<M;++i)nex[p][i]=;
        cnt[p]=;
        num[p]=;
        len[p]=l;
        return p++;
    }
    
    void init()
    {
        p=;
        newnode();
        newnode(-);
        last=;
        n=;
        S[n]=-;
        fail[]=;
    }
    
    int get_fail(int x){
        while(S[n-len[x]-]!=S[n])x=fail[x];
        return x;
    }
    
    void add(int c){
        c-='a';
        S[++n]=c;
        int cur=get_fail(last);
        if(!nex[cur][c]){
            int now=newnode(len[cur]+);
            fail[now]=nex[get_fail(fail[cur])][c];
            nex[cur][c]=now;
            num[now]=num[fail[now]]+;
        }
        last=nex[cur][c];
        cnt[last]++;
    }
    
    void count(){
        for(int i=p-;i>=;--i)cnt[fail[i]]+=cnt[i];
        for(int i=p-;i>=;--i)
        {
            if(len[i]%)a[++m].l=len[i],a[m].n=cnt[i];
        }
    }
    
    void solve(long long k)
    {
        sort(a+,a++m);
        long long ans=;
        for(int i=;i<=m&&k;++i)
        {
            if(a[i].n<=k){
                ans=ans*qmod(a[i].l,a[i].n)%mod;
                k-=a[i].n;
            }
            else{
                ans=ans*qmod(a[i].l,k)%mod;k=;
            }
        }
        if(k)puts("-1");
        else printf("%lld\n",ans);
    }
}T;
char s[N];
int l[N];
void solve(int n,long long k)
{
    T.init();int ans=;
    for(int i=;i<n;++i)
    {
        T.add(s[i]);
    }
    T.count();
    T.solve(k);
}
int main()
{
    int n;long long k;
    scanf("%d%lld%s",&n,&k,s);
    solve(n,k);
    return ;
}

Tsinsen 拉拉队排练的更多相关文章

  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. 青橙 A1255. 拉拉队排练(陶文博)

    A1255. 拉拉队排练(陶文博) 时间限制:1.0s   内存限制:512.0MB   总提交次数:   AC次数:   平均分:   将本题分享到:        查看未格式化的试题   提交   ...

  5. BZOJ_2160_拉拉队排练_manacher

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

  6. bzoj2160拉拉队排练

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

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

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

  8. BZOJ2160: 拉拉队排练

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

  9. BZOJ2160 拉拉队排练【Manacher】

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

随机推荐

  1. 【POJ】3177 Redundant Paths

    [算法]边双连通分量 [题意&题解]http://blog.csdn.net/geniusluzh/article/details/6619575 (注意第一份代码是错误的) 一些细节: 1. ...

  2. 在Java中,你真的会日期转换吗

    1.什么是SimpleDateFormat 在java doc对SimpleDateFormat的解释如下: SimpleDateFormat is a concrete class for form ...

  3. HDU 1256 画8 (找规律)

    题目链接 Problem Description 谁画8画的好,画的快,今后就发的快,学业发达,事业发达,祝大家发,发,发.   Input 输入的第一行为一个整数N,表示后面有N组数据. 每组数据中 ...

  4. 去掉input获取focus时的边框

    贴图,问题如下: 尽管已经设置输入框的border为none,当输入框focus时扔会出现浏览器自带的边框 解决方法,添加如下样式即可,.fs_input为输入框样式 ---------------- ...

  5. 24、简述Python的深浅拷贝以及应用场景

    深浅拷贝的原理 深浅拷贝用法来自copy模块. 导入模块:import copy 浅拷贝:copy.copy 深拷贝:copy.deepcopy 字面理解:浅拷贝指仅仅拷贝数据集合的第一层数据,深拷贝 ...

  6. PHP动态修改配置文件——php经典实例

    文件结构: index.php 主页 config 配置文件 doUpdate.php 修改功能页 index.php <html> <head> <title>修 ...

  7. tp修改的写法

  8. sniffer简单使用

    跟wireshark类似. 只是说显示的容易忘记所以丢张图记录一下. 该工具还是很坑爹的,不是比赛要用到所以都不是很想弄.一般机器运行不起来.不是蓝屏就是装了运行不了各种闪退,找了学校一台内网服务器才 ...

  9. 转:字符集和字符编码(Charset & Encoding)

    转自:http://www.cnblogs.com/skynet/archive/2011/05/03/2035105.html ——每个软件开发人员应该无条件掌握的知识! ——Unicode伟大的创 ...

  10. RestTemplate OR Spring Cloud Feign 上传文件

    SpringBoot,通过RestTemplate 或者 Spring Cloud Feign,上传文件(支持多文件上传),服务端接口是MultipartFile接收. 将文件的字节流,放入ByteA ...