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

首先特别鸣谢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. Qt 自定义信号与槽
  2. linux 物理内存 分配,[linux物理内存分配]Linux系统下如何查看物理内存占用率
  3. SevOne将SD-WAN监控扩展到VMware NSX
  4. python连接池原理_python redis之连接池的原理
  5. 【Python】skimage模块
  6. LiveVideoStack线上分享第五季(四):基于Nginx的媒体服务器技术
  7. Oracle中listener does not currently know of SID given in connect descriptor
  8. Python+OpenCV:OpenCV-Python绑定是如何工作的?
  9. 【机器学习课程笔记(吴恩达)】2.2 代价函数
  10. APP抓包加密破解(hook)
  11. Android NFC 门票系统手机端程序简介
  12. vue使用vue-ueditor-wrap集成秀米
  13. 互联网广告人--联合御寒--品牌,代理,平台,达人 多方携手御寒
  14. 单机诛仙3服务器正在维护,【运营版】诛仙3单机版天界一键MSSQL端修复大量BUG+视频教程+GM工具...
  15. cleintHeight、offsetHeight、scrollHeight、cleintTop、offsetTop、scrollTop、getClientRects、getBoundingClien
  16. 图像特征提取之LoG特征
  17. java获取手机号归属地
  18. 再谈谷歌搜索引擎使用技巧
  19. Chainge橙子钱包跨链技术介绍
  20. MATLAB蚁群算法、遗传算法、粒子群算法解决TSP问题(可以直接运行)

热门文章

  1. cefsharp.wpf离线安装包下载_在vscode里编写c++程序(解决gdb下载失败问题)
  2. 东北电力大学计算机网络复试题,2020年东北电力大学计算机学院复试(20200901201159).pdf...
  3. code标签无法渲染html,【菜鸟笔记】记一次django无法正常在ie和edge浏览器渲染html页面-站长资讯中心...
  4. java广度优先遍历
  5. 郑州大学软件学院 大学生创新创业选拔赛章程
  6. Hive | 加载数据后,出现字段显示为 NULL的问题
  7. 产品经理必须要了解的经济学原理--“口红效应”
  8. 算术表达式的实现,支持加减乘除,括号运算,表达式转二叉树
  9. 深入理解Spark 2.1 Core (十二):TimSort 的原理与源码分析
  10. spark向量矩阵的使用(scala)