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 ...
最新文章
- mysql二进制还原表_MYSQL 二进制还原
- js和html以及css的区别,html、css、js中的区别与关系
- ubuntu 下更新pip后发生 ImportError: cannot import name ‘main‘的问题解决
- 浅析刚刚起步的创业公司应该如何选择适合自己的网站类型呢?
- 企业dns 服务器的搭建
- 一维OTSU法、最小交叉熵法、二维OTSU法及C++源码
- 2016 linux发行版排行_选择困难症必看!云服务器如何选择操作系统,Windows和Linux哪个更好?...
- C++|Java混合实验-java搭建get方法靶场,Qt发送请求获取数据
- 简单async/wait使用样例
- YUY2(YUV) 与 RGB 格式图片的相互转换 以及 基于YUY2(YUV)的blending
- java中== 和 .equals()的区别
- flex4 BlazeDS 入门及配置
- HDU2082 找单词【母函数】
- RabbitMQ 使用参考
- SQL Server 2005安装图解
- js判断是否为微信浏览器
- html原生listview,Html中使用M$控件系列之 ListView 篇
- Java中abstract关键字详解
- java 创建消息队列_java - 在Java中动态创建异步消息队列 - 堆栈内存溢出
- JQuery Easyui/TopJUI表格基本的删除功能(删除当前行和多选删除)
热门文章
- python3.7官网中文官网_Python官网宣布,正式发布Python 3.7.0!
- 我的世界php开服环境_PHP初学者如何搭建环境,并在本地服务器(or云端服务器)运行自己的第一个PHP样例...
- 手机的小窗口怎么弄_做一个表白小程序
- mysql mybatis模糊查询语句_详解MyBatis模糊查询LIKE的三种方式
- oracle 11g 忘记了sys,system,scott密码
- 反射获取成员方法并运行
- 生产中的12种容器镜像扫描最佳实践
- 协同过滤—基于图的方法
- C语言程序的内存分配方式
- scikit-learn学习笔记(六)Decision Trees(决策树)