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

字符串学习

时间:2024-11-04 12:09:17浏览次数:2  
标签: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)......
  • rust学习四、控制语句
    rust的控制语句和大部分语言没有什么区别,都是熟悉的for,while,loop,if。比较不同的是,在绝大部分非常流行的语言中都有的switch,rust是没有的。诸如c/c++,java,javascript,c#。连PL/SQL都有casewhen语句。 一、基本的for、while、if,loop示例-for,while,loop,if/**学习控......
  • FFT学习笔记
    $\quad$本人蒟蒻,只能介绍FFT在OI中的应用,如有错误或不当之处还请指出。$\quad$首先先说一下那一堆什么什么\(TT\)的都是什么DET:离散傅里叶变换用于求多项式乘法\(O(n^2)\)FFT:快速傅里叶变换用于求多项式乘法\(O(nlog(n))\)FNTT/NTT:FTT的优化,常数及精度更优FWT......