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

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

相关推荐
eggwyw1 小时前
Anaconda安装卸载的详细流程指南
开发语言·python
码客-ygluu5 小时前
一个通用游戏数据服务器
c++·架构
another heaven6 小时前
【C/C++ Ranges 是零开销抽象吗?拆开管道、惰性求值和编译期膨胀】
c语言·开发语言·c++
SomeOtherTime7 小时前
Rust 闭包语法和原理(AI回答)
开发语言·后端·rust
apcipot_rain7 小时前
C++转Java日记(10)
java·开发语言
总要学点什么8 小时前
第105篇:三维特效-流动图片墙体效果——让箭头沿墙长滚,它俩竟是同一份代码
开发语言·javascript·ecmascript·gis·webgl·材质·cesium
YLCHUP8 小时前
【思维&图论建模】题解:债权(debt)_图论_建模_思路转化_思维题目_C++算法竞赛
c++·笔记·算法·数学建模·贪心算法·深度优先·图论
xiaoye-duck8 小时前
《C++ 项目:手写大模型接入 SDK》会话模块整合:内存 SessionManager 与 DataManager 持久化联动
开发语言·数据库·c++·语言模型
思麟呀9 小时前
背包DP(01背包+完全背包)
c++·算法
Funlang10 小时前
龙芯上的 Fun:从跑起来到机器码
开发语言·龙芯