luogu P1659 [国家集训队]拉拉队排练
唔。。。。话说好久没有发布题解了(手痒痒了
首先特别鸣谢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 [国家集训队]拉拉队排练相关推荐
- P1659 [国家集训队]拉拉队排练
题目描述 艾利斯顿商学院篮球队要参加一年一度的市篮球比赛了.拉拉队是篮球比赛的一个看点,好的拉拉队往往能帮助球队增加士气,赢得最终的比赛.所以作为拉拉队队长的楚雨荨同学知道,帮助篮球队训练好拉拉队有多 ...
- 【洛谷 P1659】 [国家集训队]拉拉队排练(manacher)
题目链接 马拉车+简单膜你 #include <cstdio> #include <cstring> #include <algorithm> using name ...
- [回文树][BZOJ2160][国家集训队]拉拉队排练
Description 艾利斯顿商学院篮球队要参加一年一度的市篮球比赛了.拉拉队是篮球比赛的一个看点,好的拉拉队往往能帮助球队增加士气,赢得最终的比赛.所以作为拉拉队队长的楚雨荨同学知道,帮助篮球队训 ...
- luogu P2634 [国家集训队]聪聪可可 点分治
luogu P2634 [国家集训队]聪聪可可 点分治 没啥难度,只需将路径取模,开桶,统计 d[0],d[1],d[2] 的值即可. ans = d[1]*d[2]*d[2]+d[0]*d[0] C ...
- Luogu P2619 [国家集训队2]Tree I(WQS二分+最小生成树)
P2619 [国家集训队2]Tree I 题意 题目描述 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有\(need\)条白色边的生成树. 题目保证有解. 输入输出格式 输入格式 ...
- luogu P4643 [国家集训队]阿狸和桃子的游戏
https://www.luogu.com.cn/problem/P4643 打比赛签到题是这题的加强版,完全不会,人傻了 记w(u)w(u)w(u)表示和u点相连的边权之和加上自身的点权 可以发现答 ...
- luogu P2634 [国家集训队]聪聪可可
背景: hehe...hehe...hehe... 题目传送门: https://www.luogu.org/problemnew/show/P2634 题意: 在树上选两个点权值和是333的倍数的概 ...
- Luogu P2619 [国家集训队2]Tree I 凸优化,wqs二分
新学的科技.设\(f(x)\)为选\(x\)条白色边的时候的最小生成树权值和,那么可以猜到它应该是一个下凸函数的形式. 如图,图中\(x\)坐标表示选的白色边条数,\(y\)坐标表示获得的权值,那么我 ...
- Luogu P1407 [国家集训队]稳定婚姻 (二分图写法)
RT,这是一道强联通分量. 而我一个热爱匈牙利的OIer 默默敲下了... #include<cstdio> #include<iostream> #include<cs ...
最新文章
- Qt 自定义信号与槽
- linux 物理内存 分配,[linux物理内存分配]Linux系统下如何查看物理内存占用率
- SevOne将SD-WAN监控扩展到VMware NSX
- python连接池原理_python redis之连接池的原理
- 【Python】skimage模块
- LiveVideoStack线上分享第五季(四):基于Nginx的媒体服务器技术
- Oracle中listener does not currently know of SID given in connect descriptor
- Python+OpenCV:OpenCV-Python绑定是如何工作的?
- 【机器学习课程笔记(吴恩达)】2.2 代价函数
- APP抓包加密破解(hook)
- Android NFC 门票系统手机端程序简介
- vue使用vue-ueditor-wrap集成秀米
- 互联网广告人--联合御寒--品牌,代理,平台,达人 多方携手御寒
- 单机诛仙3服务器正在维护,【运营版】诛仙3单机版天界一键MSSQL端修复大量BUG+视频教程+GM工具...
- cleintHeight、offsetHeight、scrollHeight、cleintTop、offsetTop、scrollTop、getClientRects、getBoundingClien
- 图像特征提取之LoG特征
- java获取手机号归属地
- 再谈谷歌搜索引擎使用技巧
- Chainge橙子钱包跨链技术介绍
- MATLAB蚁群算法、遗传算法、粒子群算法解决TSP问题(可以直接运行)
热门文章
- cefsharp.wpf离线安装包下载_在vscode里编写c++程序(解决gdb下载失败问题)
- 东北电力大学计算机网络复试题,2020年东北电力大学计算机学院复试(20200901201159).pdf...
- code标签无法渲染html,【菜鸟笔记】记一次django无法正常在ie和edge浏览器渲染html页面-站长资讯中心...
- java广度优先遍历
- 郑州大学软件学院 大学生创新创业选拔赛章程
- Hive | 加载数据后,出现字段显示为 NULL的问题
- 产品经理必须要了解的经济学原理--“口红效应”
- 算术表达式的实现,支持加减乘除,括号运算,表达式转二叉树
- 深入理解Spark 2.1 Core (十二):TimSort 的原理与源码分析
- spark向量矩阵的使用(scala)