A.ABB(Manacher)

2024-05-31 15:18
文章标签 abb manacher

本文主要是介绍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 university wanted to build its representative bungalow street for important foreign visitors and collaborators.
Currently, the street is built only partially, it begins at the lake shore and continues into the forests, where it currently ends. Fernando’s task is to complete the street at its forest end by building more bungalows there. All existing bungalows stand on one side of the street and the new ones should be built on the same side. The bungalows are of various types and painted in various colors.
The whole disposition of the street looks a bit chaotic to Fernando. He is afraid that it will look even more chaotic when he adds new bungalows of his own design. To counterbalance the chaos of all bungalow shapes, he wants to add some order to the arrangement by choosing suitable colors for the new bungalows. When the project is finished, the whole sequence of bungalow colors will be symmetric, that is, the sequence of colors is the same when observed from either end of the street.
Among other questions, Fernando wonders what is the minimum number of new bungalows he needs to build and paint appropriately to complete the project while respecting his self-imposed bungalow color constraint.
输入描述:
The first line contains one integer N (1 ≤ N ≤ 4·105 ), the number of existing bungalows in the street. The next line describes the sequence of colors of the existing bungalows, from the beginning of the street at the lake. The line contains one string composed of N lowercase letters (“a” through “z”), where different letters represent different colors.
输出描述:
Output the minimum number of bungalows which must be added to the forest end of the street and painted appropriately to satisfy Fernando’s color symmetry demand.
示例1
输入
3
abb
输出
1
示例2
输入
12
recakjenecep
输出
11
示例3
输入
15
murderforajarof
输出
6

题意
给你一个字符串,问你末尾最少加几个字符能成为一个回文串?

思路
很容易想到判断子串能不能成为一个回文子串,不过这个子串得到末尾,很容易想到马拉车,那么就是在其模板上魔改就行了。
具体是我们用马拉车求出len数组,然后从头开始判断这个子串是不是回文且到末尾。

代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 4e5 + 5;
const ll mod = 1e9 + 7;int Case,n;char s[N * 2], str[N * 2];
int Len[N * 2];
void getstr() {//重定义字符串int k = 0;str[k++] = '@';//开头加个特殊字符防止越界for (int i = 0; i < n; i++) {str[k++] = '#';str[k++] = s[i];}str[k++] = '#';n = k;str[k] = 0;//字符串尾设置为0,防止越界
}
void manacher() {int mx = 0, id;//mx为最右边,id为中心点for (int i = 1; i < n; i++) {if (mx > i) Len[i] = min(mx - i, Len[2 * id - i]);//判断当前点超没超过mxelse Len[i] = 1;//超过了就让他等于1,之后再进行查找while (str[i + Len[i]] == str[i - Len[i]]) Len[i]++;//判断当前点是不是最长回文子串,不断的向右扩展if (Len[i] + i > mx) {//更新mxmx = Len[i] + i;id = i;//更新中间点}}
}void solve(){scanf("%d",&n);int t = n;scanf("%s",s);getstr();manacher();for(int i=1;i<n;i++){if(Len[i]+i==n){printf("%d",max(0,t-Len[i] + 1));return;}}
}int main(){Case = 1;//scanf("%d",&Case);while(Case--){solve();}
}

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



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

相关文章

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

C1-2 ABB二次SDK开发——手把手教登录对应的机器人控制器(图片引导操作)登录机器人控制器和刷新机器人列表

1.完成配置后我们开始进行操作 C1-1 ABB二次SDK开发——C#Window窗体-环境配置(带ABB二次开发SDK资源包)-CSDN博客文章浏览阅读95次。3.记住路径,右键C#引用,然后导入ABB.Robotics.Controllers.PC.dll。2.安装资源文件PCABB二次开发的SDK,并打开安装路径。1.新建VSC#的windowfrom项目。4.在框架代码主界面代码中添加。

C1-1 ABB二次SDK开发——C#Window窗体-环境配置(带ABB二次开发SDK资源包)

一.使用Visual Stdio创建一个项目 1.新建VSC#的windowfrom项目 2.安装资源文件PCABB二次开发的SDK,并打开安装路径 3.记住路径,右键C#引用,然后导入ABB.Robotics.Controllers.PC.dll 4.在框架代码主界面代码中添加 using ABB.Robotics.Controllers;using ABB.Roboti

关于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,你能不能分别在这些字符串中找到它

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

ABB机器人配置DSQC652通信板的具体方法

ABB机器人配置DSQC652通信板的具体方法 DSQC652通信板共有5个接线端子X1~X5,其中X2为DO数字输出;X4为DI数字输入; DSQC652设备地址如何设置和计算? 如下图所示,如果7-12端子均和6端子短接(即所有的管脚此时都是低电平),则DSQC652设备的默认地址=1+2+4+8+16+32=63, 如下图所示,如果8和10端子被剪掉,则DSQC652地

LabVIEW编程控制ABB机械臂

使用LabVIEW编程控制ABB机械臂是一项复杂但十分有价值的任务。通过LabVIEW,可以实现对机械臂的精确控制和监控,提升自动化水平和操作效率。 1. 项目规划和硬件选型 1.1 确定系统需求 运动控制:确定机械臂需要执行的任务,如抓取、搬运、装配等。 传感器集成:确定需要集成的传感器,如位置传感器、力传感器、视觉传感器等。 通讯接口:确定与ABB机械臂控制器的通讯接口,如Ethe

ABB机器人教程:工具载荷与有效载荷数据自动标定操作方法

目录 概述 工具载荷自动标定前的准备工作 进入载荷识别服务例行程序 工具载荷识别与标定操作 有效载荷识别与标定操作要点 4轴码垛类型机器人载荷数据标定说明 概述 在使用ABB机器人前需要正确标定一些关键数据,其中就包含载荷数据。理论上讲,安装在机器人上的所有设备均需标定其载荷数据。如果没有标定或没有准确标定载荷数据,会导致机器人机械结构过载,这样不仅机器人无法发挥其最大能力,而

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