C++课后习题训练记录Day175

1.练习项目 :

问题描述

给定一个字符串 S ,请找出 S 的一个前缀和后缀,使得它们拼接后是一个回文串。

请输出这个串的最长长度。

输入描述

输入一行包含一个字符串 S ,由小写英文字母组成。

输出描述

输出一行包含一个整数表示答案。

2.选择课程

在蓝桥云课中选择题库,选择题号17148并开始练习。

3.开始练习

(1)源码 :

#include <bits/stdc++.h>

using namespace std;

using ull=unsigned long long;

const int N=1e5+10,base=131;

ull preN,bN,sufN;

char sN;

int n,pN;

ull getpre(int l,int r)

{

return prer-prel-1*br-l+1;

}

ull getsuf(int l,int r)

{

return sufl-sufr+1*br-l+1;

}

bool check(int r)

{

ull a=getpre(1,r),b=getsuf(n-r+1,n);

return a==b;

}

int main()

{

ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);

cin>>s+1;

n=strlen(s+1);

b0=1;

for(int i=1;i<=n;i++){

bi=bi-1*base;

prei=prei-1*base+si;

}

for(int i=n;i>=1;i--){

sufi=sufi+1*base+si;

}

for(int i=2*n+1;i>=1;i--){

si=(i&1)?'#':si\>\>1;

}

s0='^',s2\*n+2='$';

int C=0,R=0;

for(int i=1;i<=2*n+1;i++){

pi=i<R?min(R-i,p2\*C-i):1;

while(si+p\[i]==si-p\[i])pi++;

if(i+pi>R)C=i,R=i+pi;

}

int ans=0;

for(int i=1;i<=2*n+1;i++){

int len=pi-1;

int idx=(i&1)?i-1>>1:i>>1;

int l=(i&1)?idx-len/2:idx-(len+1)/2;

int r=(i&1)?idx+len/2+1:idx+(len+1)/2;

if(check(l))

ans=max(ans,2*l+len);

if(check(n-r+1))

ans=max(ans,2*(n-r+1)+len);

}

cout<<ans<<'\n';

return 0;

}

(2)检验结果

对此代码进行检验,检验后无报错,提交此代码,判题结果为正确100分。

(3)练习心得:

注意每段代码末尾的分号是否存在 ,如不存在则需即使补充;输入法是否切换为英语模式;语法是否错误。

相关推荐
caimouse1 小时前
ReactOS 窗口系统分析(23):键盘 — keyboard.c + kbdlayout.c
c语言·开发语言·计算机外设
Emily156853598701 小时前
Emerson 1C31129G03 Analog Input Module
java·开发语言·前端·plc·emerson·1c31129g03·input module
就叫_这个吧6 小时前
Java递归方法实现面包屑导航
java·开发语言
fīɡЙtīиɡ ℡6 小时前
AI 应用系统设计
java·开发语言·人工智能
码匠许师傅6 小时前
【C++ 面试真题】26. 聊聊 C++ 的智能指针
java·c++·面试
今天AI了吗8 小时前
Python 基础语法(一):常量、变量、输入输出与运算符
开发语言·数据库·人工智能·python·sql·深度学习·机器学习
TELL5218 小时前
selenium webdriver 第二次初始化的异常
开发语言·python
动词ing9 小时前
【C语言】自定义函数+指针入门
c语言·开发语言·算法
重生之后端学习9 小时前
283. 移动零[简单]✅
开发语言·数据结构·算法·leetcode·职场和发展
动词ing10 小时前
【C语言】结构体+文件基础
c语言·开发语言·数据结构