bzoj2160(manacher)

2023-10-20 05:38
文章标签 bzoj2160 manacher

本文主要是介绍bzoj2160(manacher),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

manacher复习

可以按照自己思路来写

#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<algorithm>
using namespace std;
typedef long long ll;
const ll mod=19930726;int n,m,p[1000005];
ll k,f[1000005];
char s[1000005];ll aa(ll a,ll b)
{ll ans=1;while (b){if (b&1) ans=ans*a%mod;a=a*a%mod;b>>=1;}return ans;
}int main()
{scanf("%d%lld",&n,&k);scanf("%s",s+1);s[0]='$';int id=0,mx=0;for (int i=1;i<=n;i++){if (mx>i) p[i]=min(mx-i,p[id-(i-id)]);else p[i]=0;while (s[i+p[i]]==s[i-p[i]]) p[i]++;p[i]--;if (i+p[i]>mx) mx=i+p[i],id=i;f[1+p[i]*2]++;}for (int i=n;i>=1;i--) f[i]+=f[i+2];ll ans=1;for (int i=n;i>=1&&k;i--) if (i&1) {ans=ans*aa(i,min(f[i],k))%mod;k-=min(f[i],k);}if (k) printf("-1");else printf("%lld",ans);return 0;
}


 

 

 

这篇关于bzoj2160(manacher)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/245034

相关文章

poj 3974 and hdu 3068 最长回文串的O(n)解法(Manacher算法)

求一段字符串中的最长回文串。 因为数据量比较大,用原来的O(n^2)会爆。 小白上的O(n^2)解法代码:TLE啦~ #include<stdio.h>#include<string.h>const int Maxn = 1000000;char s[Maxn];int main(){char e[] = {"END"};while(scanf("%s", s) != EO

关于Manacher 算法中不明之处我的理解

首先贴参考代码: #manacher算法#时间复杂度O(n)class Solution:def longestPalindrome(self,s):if len(s) <= 1:return s# 每个字符之间插入 #ss = '$#' + '#'.join([x for x in s]) + '#`'p = [1] * len(ss)center = 0mx = 0max_str = '

Manacher求最长回文

#1032 : 最长回文子串 时间限制: 1000ms 单点时限: 1000ms 内存限制: 64MB 描述    小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进。    这一天,他们遇到了一连串的字符串,于是小Hi就向小Ho提出了那个经典的问题:“小Ho,你能不能分别在这些字符串中找到它

BZOJ2160 拉拉队排练(回文树)

HYSBZ - 2160 拉拉队排练 Time Limit: 10000MS Memory Limit: 265216KB 64bit IO Format: %lld & %llu Submit Status Description 艾利斯顿商学院篮球队要参加一年一度的市篮球比赛了。拉拉队是篮球比赛的一个看点,好的拉拉队往往能帮助球队增加士气,赢得最终的比赛。所以

hdu5371(2015多校7)--Hotaru's problem(Manacher+线段树)

题目链接:点击打开链接 题目大意:定义一个子串,子串由三部分组成,其中第一部分和第三部分相同,第一部分和第二部分对称。给出一个n个数的序列,问序列中最长的符合要求的子串的长度。 例如2 3 4 4 3 2 2 3 4,第一部分2 3 4,第二部分4 3 2 ,第三部分2 3 4,符合条件。 题目的大意可以转化成求两个回文串,其中第一个回文串的右侧和第二个回文串的左侧重叠。 首先使用Mana

Manacher算法(求最长回文字符串长度)

//public class StringProblem{//Manacher算法 预处理public static char[] manacherString(String str) {char[] charArr = str.toCharArray();char[] res = new char[str.length() * 2 + 1];int index = 0;for (int i

Manacher解决最长回文子串

问题描述 给定一个字符串,求解该字符串的最长回文子串 解法一 以字符串中的每个字符为中心,枚举其最长的回文子串,注意奇数和偶数长度的子串 int longPalindrome(char*str){int len = strlen(str);int maxlen = 1;for(int i = 0; i < len-1; i++){int j;for(j = 1; i - j >= 0 &

【算法知识总结】最长回文子串-Manacher算法

转载自:《简书》曾会玩-最长回文子串问题—Manacher算法 问题说明 最长回文子串问题:给定一个字符串,求它最长回文子串长度。 方法比较 Brute-force解法 对于最长回文子串问题,最简单粗暴的办法是:找到字符串的所有子串,遍历每一个子串以验证它们是否为回文串。一个子串由子串的起点和终点确定,因此对于一个长度为 n n n的字符串,共有n2n2n^2个子串。这些子串的平均长度

HDU 3068 最长回文(Manacher 算法)

最长回文 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 5713    Accepted Submission(s): 1940 Problem Description 给出一个只由小写英文字符a,b,c...

A.ABB(Manacher)

链接 https://ac.nowcoder.com/acm/problem/209398 题目描述 Fernando was hired by the University of Waterloo to finish a development project the university started some time ago. Outside the campus, the unive