首页 > 其他分享 >字符串学习

字符串学习

时间:2024-11-04 12:09:17浏览次数:1  
标签:char int ll 学习 isdigit while 字符串 define

manacher

马拉车算法( ,OI-Wiki

算法介绍: 线性复杂度内找出以每个字符为回文中心的最长回文半径

存下模板代码:

int l = 0, r = -1;
for(int i=1; i<=n; i++){
    int k = i > r ? 1 : min(d[l+r-i], r-i+1);
    while(i - k > 0 and k + i <= n and s[i-k] == s[i+k]) k++;
    d[i] = k--;
    if(r < i + k) l = i - k , r = i + k;
}

当时自己推的板子是个什么构思

板子题: 【模板】manacher

code d ```cpp #include #define Aqrfre(x, y) freopen(#x ".in", "r", stdin),freopen(#y ".out", "w", stdout) #define mp make_pair #define Type ll #define qr(x) x=read() typedef __int128 INT; typedef long long ll; using namespace std;

inline ll read(){
char c=getchar(); ll x=0, f=1;
while(!isdigit(c)) (c=='-'?f=-1:f=1), c=getchar();
while(isdigit(c)) x=(x<<1)+(x<<3)+(c^48), c=getchar();
return x*f;
}

const int N = 2.2e7 + 10;

int n, d[N];
char in[N], s[N];

signed main(){ // a
// Aqrfre(a, a);

cin>>(in+1); n = strlen(in+1);

int cnt = 0;
for(int i=1; i<=n; i++)
    s[++cnt] = '@', s[++cnt] = in[i];
s[++cnt] = '@'; n = cnt;

int l = 0, r = -1, ans = 0;
for(int i=1; i<=n; i++){
    int k = i > r ? 1 : min(d[l+r-i], r-i+1);
    while(i - k > 0 and k + i <= n and s[i-k] == s[i+k]) k++;
    d[i] = k--;
    if(r < i + k) l = i - k , r = i + k;
}

for(int i=1; i<=n; i++){
    if(s[i] == '@') ans = max(ans, d[i] / 2 * 2); 
    else ans = max(ans, d[i] - !(d[i] & 1));
}
cout<<ans<<"\n";



return 0;

}

</details>

标签:char,int,ll,学习,isdigit,while,字符串,define
From: https://www.cnblogs.com/YuenYouth/p/18524940

相关文章

  • 学习JS
    varfoo=(functionCoolModule(){varsomething='cool';varanother=[1,2,3];functiondoSomething(){console.log(something);}functiondoAnother(){console.log(another);......
  • 10.24 每日总结(今天继续学习软考)
    终于又开始学习软考了。学习时长2小时。学习的的软件工程模块(下面懒得敲,就直接粘贴了):结构化方法:流程固定,针对需求明确的项目,自顶向下,逐层分解,面向数据流。将数据流映射为软件系统的模块结构,数据流类型包括变换流型和事务流型,不同类型的数据流有不同的映射方法。以瀑布模型为代......
  • 深入学习软件组件认证的三个关键
    人工智能软件,特别是深学习组件,是目前实现自主汽车等自主系统的最先进和经济上可行的解决方案。然而,DL算法的性质及其当前的实现与汽车、卫星和火车等安全关键系统中严格的软件开发过程不一致。传统的安全相关软件采用自上而下的方法,对组件进行分解,并相应地传播安全要求,直至......
  • Java面试系列-Java并发面试题20道,结合手撕Java系列学习效果更佳,知识点更深入
    文章目录1.什么是线程安全?2.解释下Java中的Thread类和Runnable接口的区别。3.Java中的synchronized关键字有哪些特性?4.volatile关键字的作用及限制是什么?5.解释Java内存模型(JMM)。6.Java中如何实现线程间通信?7.AQS(AbstractQueuedSynchronizer)的工作原理是什么?8.......
  • 学习记录:STM32G431CBU6的多通道ADC采样串口打印(HAL库)
    一配置  二代码uint16_tGet_adc(){//启动ADC1HAL_ADC_Start(&hadc1);//等待ADC转换完成,超时为100msHAL_ADC_PollForConversion(&hadc1,100);//判断ADC是否转换成功if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1),HAL_ADC_STATE_REG_EOC)......
  • Linux安装深度学习环境Anaconda踩坑记录
    最近导师扔了两台服务器给我管理,导师老板的博士师兄给我登上ssh后就出国参加学术会议了。因为服务器连得是实验室的路由器,所以默认情况下只有在实验室的局域网内才能连,那每次训练都要跑到实验室多麻烦?于是我就在网上翻教程。通过虚拟重定向可以将映射到校园网的IP上。昨天在实......
  • # 学期(如2024-2025-1) 学号(如:20241402) 《计算机基础与程序设计》第七周学习总结
    学期(如2024-2025-1)学号(如:20241402)《计算机基础与程序设计》第七周学习总结作业信息这个作业属于哪个课程<班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(如2024-2025-1计算机基础与程序设计第一周作业)这个作业的目标<写上......
  • rust学习四、控制语句
    rust的控制语句和大部分语言没有什么区别,都是熟悉的for,while,loop,if。比较不同的是,在绝大部分非常流行的语言中都有的switch,rust是没有的。诸如c/c++,java,javascript,c#。连PL/SQL都有casewhen语句。 一、基本的for、while、if,loop示例-for,while,loop,if/**学习控......
  • Python中去除字符串中的单个或多个空格的方法
    python中去除字符串中空格的方法比较多,单个看起来也都比较简单将常用的去除字符串中空格的方法汇总如下 方法一:strip()方法>>>S1="IloveDory">>>S1.strip()#去除字符串首尾的空格'IloveDory' 方法二:lstrip()方法>>>S2="IloveDory">>&......
  • FFT学习笔记
    $\quad$本人蒟蒻,只能介绍FFT在OI中的应用,如有错误或不当之处还请指出。$\quad$首先先说一下那一堆什么什么\(TT\)的都是什么DET:离散傅里叶变换用于求多项式乘法\(O(n^2)\)FFT:快速傅里叶变换用于求多项式乘法\(O(nlog(n))\)FNTT/NTT:FTT的优化,常数及精度更优FWT......