zoj的测评姬好能卡时间。。

求回文子串的个数:只要把p[i]/2就行了:

  如果s_new[i]是‘#’,算的是没有中心的偶回文串

  反之是奇回文串

/*
给定两个字符串s,t
结论:s,t不相同的第一个字符下标为l,最后一个字符下标为r
如果l==r,那么不存在解
如果l<r,那么翻转s的一个子串时,一定是将s[l]和s[r]互相翻转
反证:假设存在s[l]和s[r+k]的翻转方法,
因为s[r+k]=t[r+k]=t[l],且s[l]=t[r+k],可得s[l]=t[l],矛盾
l-k同理 所以本题只需要考虑三种情况:
1.两个串相等:求s的回文子串
2.l==r,无解
3.l<r,首先s[l,r]翻转后和t[l,r]相等,然后找以s[l,r]为中心的回文子串
*/
#include<bits/stdc++.h>
using namespace std;
#define maxn 5000006
char s[maxn],t[maxn],s_new[maxn];
int p[maxn]; int init(){
int len=strlen(s),j=;
s_new[]='$',s_new[]='#';
for(int i=;i<len;i++){
s_new[j++]=s[i];
s_new[j++]='#';
}
s_new[j]=;
return j;
}
long long manacher(){
long long res=;
int len=init(),mx=,id;
for(int i=;i<len;i++){
if(mx>i)p[i]=min(p[*id-i],mx-i);
else p[i]=;
while(s_new[i-p[i]]==s_new[i+p[i]])p[i]++;
if(mx<i+p[i])mx=i+p[i],id=i;
res+=(long long )p[i]/;
}
return res;
}
int main(){
int T;cin>>T;
while(T--){
scanf("%s%s",s,t);
int len=strlen(s),l=0x3f3f3f3f,r=;
for(int i=;i<len;i++)
if(s[i]!=t[i]){l=i;break;}
for(int i=len-;i>=;i--)
if(s[i]!=t[i]){r=i;break;} if(l==r){puts("");continue;}
if(l>r){cout<<manacher()<<endl;continue;} int flag=;
for(int i=l,j=r;i<=r;i++,j--)
if(s[i]!=t[j])flag=;
if(flag){puts("");continue;}
else {
int ans=;
while(l!= && r!=len-){
--l;++r;
if(s[l]==s[r])ans++;
else break;
}
cout<<ans<<endl;
}
}
}

马拉车算法——求回文子串个数zoj4110的更多相关文章

  1. 马拉车算法——求回文串起点hdu3294

    #include<bits/stdc++.h> using namespace std; #define maxn 500005 int p[maxn]; ]; int start; in ...

  2. zoj 2744 Palindromes(计算回文子串个数的优化策略)

    题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2744 题目描述: A regular palindrome i ...

  3. hdu5340—Three Palindromes—(Manacher算法)——回文子串

    Three Palindromes Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others ...

  4. HDU 5371(2015多校7)-Hotaru&#39;s problem(Manacher算法求回文串)

    题目地址:HDU 5371 题意:给你一个具有n个元素的整数序列,问你是否存在这样一个子序列.该子序列分为三部分,第一部分与第三部分同样,第一部分与第二部分对称.假设存在求最长的符合这样的条件的序列. ...

  5. SPOJ STC02 - Antisymmetry(Manacher算法求回文串数)

    http://www.spoj.com/problems/STC02/en/ 题意:给出一个长度为n的字符串,问其中有多少个子串s可以使得s = s按位取反+翻转. 例如样例:11001011. 10 ...

  6. HDU 3948 不同回文子串个数

    集训队论文中有求不同子串个数的做法,就是扫一遍height数组,过程中根据height数组进行去重.对于本题也是雷同的,只是每一次不是根据与排名在上一位的LCP去重,而是与上一次统计对答案有贡献的后缀 ...

  7. Manacher算法求回文半径

    http://wenku.baidu.com/link?url=WFI8QEEfzxng9jGCmWHoKn0JBuHNfhZ-tKTDMux34CeY8UNUwLVPeY5HA3TyoKU2XegX ...

  8. CF 17E Palisection 求相交回文串个数

    In an English class Nick had nothing to do at all, and remembered about wonderful strings called pal ...

  9. [LeetCode] 647. 回文子串 ☆☆☆(最长子串、动态规划、中心扩展算法)

    描述 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串. 具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串. 示例 1: 输入: "abc" ...

随机推荐

  1. django下的xadmin相关设置

    后台设置中文在 settings.py LANGUAGE_CODE = 'zh-hans' TIME_ZONE = 'Asia/Shanghai' USE_I18N = True USE_L10N = ...

  2. bat脚本基本命令和格式

    bat脚本 --莫非 BAT脚本与shell脚本区别 Shell脚本使用Linux/Unix下的命令,一般文件开头以#号来告诉系统这个脚本需要什么解释器来执行(如:#!/bin/bash采用bash而 ...

  3. Ticwatch2_3G版省电优化

    设置 --> 网络与连接 --> 云消息同步(禁用) 设置 --> 声音与震动 --> 铃声与音量(静音) 设置 --> 声音与震动 --> 闹钟音量(静音) 设置 ...

  4. logstash的output配置中指定elasticsearch的template

    转自:https://blog.csdn.net/felix_yujing/article/details/78930389 之前采用的是通过filebeat收集nginx的日志,直接到elastic ...

  5. python之路day11--装饰器形成的过程、作用、装饰器的固定模式

    装饰器形成的过程# 装饰器的作用# 原则:开放封闭原则#装饰器的固定模式 import time # print(time.time()) #1551251400.416998 当前时间() #让程序 ...

  6. android studio 报红解决

    /Users/houzhibin/gradle/wrapper/dists/gradle-4.1-all/bzyivzo6n839fup2jbap0tjew/gradle-4.1-all.zip

  7. nginx、php-fpm默认配置与性能–TCP socket还是unix domain socket【转】

    原文地址:https://www.cnxct.com/default-configuration-and-performance-of-nginx-phpfpm-and-tcp-socket-or-u ...

  8. Form 表单相关小技巧

    JS ---textarea 高度自适应 var realH = this.scrollHeight + 10+ "px"; $(this).css("height&qu ...

  9. JGUI源码:实现简单MVVM单项绑定学习笔记(15)

    前面几节都是jquery界面方面的东西,本节研究些数据方面的东西:MVVM. MVVM由三部分组成:Model <=> ViewModel <=> View,当Model数据改 ...

  10. mysql 一张表的数据插入另一张表的sql语句

    1. 表结构完全一样 insert into 表1 select * from 表2 2. 表结构不一样(这种情况下得指定列名) insert into 表(列名1,列名2,列名3) select 列 ...