用 Manacher 跑出回文串长,注意这里不需要偶数长度所以不需要对串做一些奇怪的处理 然后用前缀和搞一下,计算答案时跑快速幂即可 #include <bits/stdc++.h> using namespace std; #define int long long #define ll long long namespace man { const int N = 1100005; char str[N], s[N<<1]; int a[N<<1]; int man…
题目描述 n个女生举牌子(只含有26个小写字母,长度为n的字符串), 如果连续的一段女生,有奇数个,并且她们手中的牌子所写的字母,从左到右和从右到左读起来一样,那么这一段女生就被称作和谐小群体. 现在想找出所有和谐小群体,并且按照女生的个数降序排序之后,前K个和谐小群体的女生个数的乘积是多少.由于答案可能很大,输出除以19930726的余数. 分析 显然,一个和谐小群体是一个长度为奇数的回文串. 理所当然地我们想到了manacher算法 manacher算法可以求出每个位置的回文半径. 所以我们…
题目链接:https://www.luogu.com.cn/problem/P1659 思路: 首先跑一遍Manacher,用$cnt_i$记录长为$i$的回文串有多少个. 所记录的$cnt$并不是最终的$cnt$,如$cnt_1$在$cnt_2$中也有,可用$sum=cnt_1+cnt_2$,然后长度为$i$的回文串实际有$sum$个,这就是下文中是$i^{sum}$的原因. 然后我们从$n$~$1$枚举(降序): 如果$cnt_i$中的$i$是偶数,则continue 如果是奇数,那么更新答…
题目链接 马拉车+简单膜你 #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int MAXN = 11000010; const int MOD = 19930726; char b[MAXN], a[MAXN << 1]; int hw[MAXN << 1], ans = 1, n, c[MAXN]; #define ll…
题面 Description 艾利斯顿商学院篮球队要参加一年一度的市篮球比赛了.拉拉队是篮球比赛的一个看点,好的拉拉队往往能帮助球队增加士气,赢得最终的比赛.所以作为拉拉队队长的楚雨荨同学知道,帮助篮球队训练好拉拉队有多么的重要.拉拉队的选拔工作已经结束,在雨荨和校长的挑选下,\(n\)位集优秀的身材.舞技于一体的美女从众多报名的女生中脱颖而出.这些女生将随着篮球队的小伙子们一起,和对手抗衡,为艾利斯顿篮球队加油助威.一个阳光明媚的早晨,雨荨带领拉拉队的队员们开始了排练.\(n\)个女生从左到右…
唔....话说好久没有发布题解了(手痒痒了 首先特别鸣谢lykkk大佬今天下午教我Manacher算法,甚是感谢 为了体现学习成果,写一篇蒟蒻版的题解(大佬勿喷 言归正传 题面——>在这儿 首先做这道题要掌握一个算法——Manacher算法 简要说他就是用来解决回文串相关问题的算法,并不高深 由题意可知,显然每一个和谐群体就是一个长度为奇数的回文串 用Manacher可以求每个位置的回文半径 因为我们只要求奇数个的回文串,那么显然我们不需要在字符串里添加一些无关字符 那么我们用Manacher求…
思路 求出cnt和len之后,直接乘起来即可 代码 #include <cstdio> #include <algorithm> #include <cstring> #define int long long using namespace std; int Nodecnt,last,n,k; signed trans[1001000][26],fail[1001000]; struct Node{ signed len,cnt; bool operator <…
直接统计长度为$i$的回文子串有多少个 然后倒叙枚举长度,快速幂统计一下即可 复杂度$O(n \log n)$ #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define ll long long #define ri register int #define rep(io, st, ed) for(ri…
Code: #include <cstdio> #include <algorithm> #include <cstring> using namespace std; #define setIO(s) freopen(s".in","r",stdin) #define maxn 2300000 #define mod 19930726 #define ll long long char str[maxn],s[maxn]; in…
一眼可得PAM 如果没学过PAM的可以看这里:PAM学习小结 我们令PAM上多记录一个信息\(sum\),表示该节点表示串在原串上出现了多少次. 当我们处理完了\(sum\),对于长度\(len\)为奇数的节点的信息\(sum\)计入数组\(a[i]\). \(a[i]\)为长度为\(i\)的回文子串出现次数. \(a[i]\)降序排序后累加答案快速幂处理一下即可,不需太多点拨 重点来了 讲一下怎么处理\(sum\) 我们可以发现当一个节点\(u\)的\(sum+1\),那么\(fail[u]\…