唔。。。。话说好久没有发布题解了(手痒痒了

首先特别鸣谢lykkk大佬今天下午教我Manacher算法,甚是感谢

为了体现学习成果,写一篇蒟蒻版的题解(大佬勿喷

言归正传


题面——>在这儿

首先做这道题要掌握一个算法——Manacher算法

简要说他就是用来解决回文串相关问题的算法,并不高深

由题意可知,显然每一个和谐群体就是一个长度为奇数的回文串

用Manacher可以求每个位置的回文半径

因为我们只要求奇数个的回文串,那么显然我们不需要在字符串里添加一些无关字符

那么我们用Manacher求出以当前位置为中心的最长回文子串长度

所以我们就会在求的同时搞出最长的len

然后根据对称性可知也有长为len*2-1的回文子串,接着我们只需要统计一下就可以了

注意我们只要奇数个,去掉偶数个

因为数据范围过大,所以我们要Fast_Pow使得不会爆掉

那么。。。下面我们来看一下我优秀的代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int mod = 19930726;
const int N = 1100000;
char s[N],str[N*2];
int p[N*2],cnt[N];
int len,n;
ll ans=1,k;
ll ksm(int x,int y) {//因为数据范围很大容易爆掉,所以就要Fast_Powif(x==1) return 1;ll res=1,base=x;while(y) {if(y&1) res=(res*base)%mod;base=(base*base)%mod;y>>=1;}return res;
}
void manacher() {//Manacher模板,详见洛谷P3805for(int i=1; i<=len; i++) str[i*2-1]='%',str[i*2]=s[i];str[len=len*2+1]='%';int id=0,mx=0;for(int i=1; i<=len; i++) {if(i<mx) p[i]=min(p[id*2-i],mx-i);else p[i]=1;while(p[i]+i<=len && i-p[i]>=1 && str[i+p[i]]==str[i-p[i]]) p[i]++;if(p[i]+i>mx) id=i,mx=i+p[i];if((p[i]-1)%2) cnt[p[i]-1]++;}
}
int main() {int sum=0;cin>>n>>k>>s+1;len=n;manacher();for(int i=n; i>=1; --i) {//根据题意常规操作if(i%2==0) continue;sum+=cnt[i];if(k>=sum) {ans=(ans*ksm(i,sum))%mod;k-=sum;} else {ans=(ans*ksm(i,k))%mod;k-=sum;break;}}if(k>0) ans=-1;cout<<ans;return 0;
}

完结,撒花!!

转载于:https://www.cnblogs.com/xmex/p/10480102.html

luogu P1659 [国家集训队]拉拉队排练相关推荐

  1. P1659 [国家集训队]拉拉队排练

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

  2. 【洛谷 P1659】 [国家集训队]拉拉队排练(manacher)

    题目链接 马拉车+简单膜你 #include <cstdio> #include <cstring> #include <algorithm> using name ...

  3. [回文树][BZOJ2160][国家集训队]拉拉队排练

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

  4. luogu P2634 [国家集训队]聪聪可可 点分治

    luogu P2634 [国家集训队]聪聪可可 点分治 没啥难度,只需将路径取模,开桶,统计 d[0],d[1],d[2] 的值即可. ans = d[1]*d[2]*d[2]+d[0]*d[0] C ...

  5. Luogu P2619 [国家集训队2]Tree I(WQS二分+最小生成树)

    P2619 [国家集训队2]Tree I 题意 题目描述 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有\(need\)条白色边的生成树. 题目保证有解. 输入输出格式 输入格式 ...

  6. luogu P4643 [国家集训队]阿狸和桃子的游戏

    https://www.luogu.com.cn/problem/P4643 打比赛签到题是这题的加强版,完全不会,人傻了 记w(u)w(u)w(u)表示和u点相连的边权之和加上自身的点权 可以发现答 ...

  7. luogu P2634 [国家集训队]聪聪可可

    背景: hehe...hehe...hehe... 题目传送门: https://www.luogu.org/problemnew/show/P2634 题意: 在树上选两个点权值和是333的倍数的概 ...

  8. Luogu P2619 [国家集训队2]Tree I 凸优化,wqs二分

    新学的科技.设\(f(x)\)为选\(x\)条白色边的时候的最小生成树权值和,那么可以猜到它应该是一个下凸函数的形式. 如图,图中\(x\)坐标表示选的白色边条数,\(y\)坐标表示获得的权值,那么我 ...

  9. Luogu P1407 [国家集训队]稳定婚姻 (二分图写法)

    RT,这是一道强联通分量. 而我一个热爱匈牙利的OIer 默默敲下了... #include<cstdio> #include<iostream> #include<cs ...

最新文章

  1. mysql二进制还原表_MYSQL 二进制还原
  2. js和html以及css的区别,html、css、js中的区别与关系
  3. ubuntu 下更新pip后发生 ImportError: cannot import name ‘main‘的问题解决
  4. 浅析刚刚起步的创业公司应该如何选择适合自己的网站类型呢?
  5. 企业dns 服务器的搭建
  6. 一维OTSU法、最小交叉熵法、二维OTSU法及C++源码
  7. 2016 linux发行版排行_选择困难症必看!云服务器如何选择操作系统,Windows和Linux哪个更好?...
  8. C++|Java混合实验-java搭建get方法靶场,Qt发送请求获取数据
  9. 简单async/wait使用样例
  10. YUY2(YUV) 与 RGB 格式图片的相互转换 以及 基于YUY2(YUV)的blending
  11. java中== 和 .equals()的区别
  12. flex4 BlazeDS 入门及配置
  13. HDU2082 找单词【母函数】
  14. RabbitMQ 使用参考
  15. SQL Server 2005安装图解
  16. js判断是否为微信浏览器
  17. html原生listview,Html中使用M$控件系列之 ListView 篇
  18. Java中abstract关键字详解
  19. java 创建消息队列_java - 在Java中动态创建异步消息队列 - 堆栈内存溢出
  20. JQuery Easyui/TopJUI表格基本的删除功能(删除当前行和多选删除)

热门文章

  1. python3.7官网中文官网_Python官网宣布,正式发布Python 3.7.0!
  2. 我的世界php开服环境_PHP初学者如何搭建环境,并在本地服务器(or云端服务器)运行自己的第一个PHP样例...
  3. 手机的小窗口怎么弄_做一个表白小程序
  4. mysql mybatis模糊查询语句_详解MyBatis模糊查询LIKE的三种方式
  5. oracle 11g 忘记了sys,system,scott密码
  6. 反射获取成员方法并运行
  7. 生产中的12种容器镜像扫描最佳实践
  8. 协同过滤—基于图的方法
  9. C语言程序的内存分配方式
  10. scikit-learn学习笔记(六)Decision Trees(决策树)