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)练习心得:

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

相关推荐
镜子AI几秒前
镜子AI案例工程复盘:用Python给GEO效果做抽样检测与置信区间估计
开发语言·人工智能·python
骑着蜗牛撵大象3274 分钟前
从三次握手到 epoll:C++ 写出可落地的 TCP Socket 服务端
网络·c++·tcp/ip·高并发·tcp·epoll
春涧草茶5 分钟前
慢就是快15-1 多进程 多线程
开发语言·python
pan_junbiao6 分钟前
Go语言中的空白标识符
开发语言·后端·golang
卡卡~~12 分钟前
C++学习
开发语言·c++
qetfw28 分钟前
Bash 基础:脚本执行、引号与命令替换验证
linux·开发语言·chrome·bash
杜 硕1 小时前
从零开始的C++生活——第四讲
开发语言·c++·生活
云和数据.ChenGuang1 小时前
Python 集合(set)常用函数详解与实战案例
开发语言·python·深度学习·langchain
隔窗听雨眠1 小时前
从PHP2Shell回望:PHP内核漏洞的二十年演进与AI时代的攻防转折
开发语言·人工智能·php
lisw051 小时前
分岔论揭示演化突变密码
开发语言·算法·数学建模