题意: 给你个s串和t串 找三元组(i,j,k) 在 s中选取 i -j  ,在t中选取 1-k,使他们拼凑出来的是回文串。

题解:首先对于s串倒转,exkmp求s串和t串extend,对s串进行manacher,求每个统计每个回文串的右端点,最后统计答案。

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e6+1000;
void pre_kmp(char x[],int m,int nex[]){nex[0]=m;int j=0;while(j+1<m&&x[j]==x[j+1]) j++;nex[1]=j;int k=1;for(int i=2;i<m;i++){int p=nex[k]+k-1;int L=nex[i-k];if(i+L<p+1) nex[i]=L;else{j=max(0,p-i+1);while(i+j<m&&x[i+j]==x[j]) j++;nex[i]=j;k=i;}}
}void ekmp(char x[],int m,char y[],int n,int nex[],ll extend[]){pre_kmp(x,m,nex);int j=0;while(j<n&&j<m&&x[j]==y[j]) j++;extend[0]=j;int k=0;for(int i=1;i<n;i++){int p=extend[k]+k-1;int L=nex[i-k];if(i+L<p+1) extend[i]=L;else {j=max(0,p-i+1);while(i+j<n&&j<m&&y[i+j]==x[j]) j++;extend[i]=j;k=i;}}
}char ma[maxn*2]; int mp[maxn*2];
ll st[maxn];
void Manacher(char s[],int len){int l=0;ma[l++]='$';ma[l++]='#';for(int i=0;i<len;i++){ma[l++]=s[i];ma[l++]='#';}ma[l]=0;int mx=0,id=0;for(int i=0;i<l;i++){mp[i]=mx>i?min(mp[2*id-i],mx-i):1;while(ma[i+mp[i]]==ma[i-mp[i]]) mp[i]++;if(i+mp[i]>mx) {mx=i+mp[i];id=i;}}for(int i=2;i<=len*2;i++){  //统计每个回文串的右端点 、差分st[(i+1)/2-1]++; st[(i+1)/2+mp[i]/2-1]--;}for(int i=1;i<len;i++) st[i]+=st[i-1];
}char s[maxn],t[maxn];
int nex[maxn];
ll extend[maxn];int main()
{scanf("%s %s",s,t);int len=strlen(s);int len1=strlen(t);reverse(s,s+len);ekmp(t,len1,s,len,nex,extend);Manacher(s,len);ll ans=0;for(int i=1;i<len;i++){ans+=(ll)(extend[i]*st[i-1]);  //求结果  extend是最长公共前缀}printf("%lld\n",ans);return 0;
}

M - Mediocre String Problem Gym - 101981M相关推荐

  1. Mediocre String Problem Gym - 101981M

    https://cn.vjudge.net/problem/Gym-101981M 很容易tle #include <iostream> #include <cstring> ...

  2. Gym - 101981 Problem M. Mediocre String Problem (扩展KMP + Manacher)

    Problem M. Mediocre String Problem 题目链接:https://vjudge.net/problem/Gym-101981M 题目大意:给出两个串S,T,从S中选择 i ...

  3. Mediocre String Problem(马拉车+扩展KMP)

    文章目录 [Mediocre String Problem](https://codeforces.com/gym/101981) 题目大意 解题思路 代码 Mediocre String Probl ...

  4. Problem M. Mediocre String Problem(Z 函数 + PAM)

    Problem M. Mediocre String Problem 给定两个串s,ts, ts,t,要求有多少不同的三元组(i,j,k)(i, j, k)(i,j,k),满足: 1≤i≤j≤∣s∣1 ...

  5. M - Mediocre String Problem( 扩展KMP + Manacher + 差分 )

    M - Mediocre String Problem( 扩展KMP + Manacher + 差分 ) 题意:给出一个串S,和一个串T. 要求 从S串中取一个子串,后面接上T串的一个前缀 组成一个结 ...

  6. Problem M. Mediocre String Problem

    Problem M. Mediocre String Problem(马拉车+拓展KMP) 题意:给一个S串一个T串, 问有多少个F(i, j, k),F(i, j, k) 的定义是S串选个下标i~j ...

  7. Gym_101981M Mediocre String Problem(exkmp+manachar)

    Mediocre String Problem time limit per test:1 seconds memory limit per test:256 megabytes Problem De ...

  8. ACM-ICPC2018南京赛区 Mediocre String Problem

    Mediocre String Problem 题解: 很容易想到将第一个串反过来,然后对于s串的每个位置可以求出t的前缀和它匹配了多少个(EXKMP 或者 二分+hash). 然后剩下的就是要处理以 ...

  9. 2018 ICPC 南京 M. Mediocre String Problem(ExKMP + Manacher / ExKMP+回文树)

    2018 ICPC 南京 全文见:https://blog.csdn.net/qq_43461168/article/details/112796538 M. Mediocre String Prob ...

最新文章

  1. DropDownList--下拉菜单
  2. 2010年度报告:是谁在编写Linux内核?
  3. 【大连】2021年下半年软考报考时间及通知
  4. boost::lambda::constructor用法的测试程序
  5. python3.70_Python3 基本数据类型
  6. SecureCRT 用来当串口工具的设置
  7. AI评委引热议,阿里巴巴表示:AI不会取代工程师
  8. 在服务器上远程使用tensorboard查看训练loss和准确率
  9. 做大公司的螺丝钉 vs 当小公司的多面手
  10. ios7以后隐藏状态栏
  11. 三星关闭在华最后一家电脑厂 约850名员工受影响
  12. 一个普通类就能干趴你的springboot,你信吗?
  13. 关于python的多线程和多进程_Python的多线程和多进程
  14. 单层感知器python_深度学习之单层感知器(一)
  15. 文件复制到u盘后文件夹是空的,怎么恢复?
  16. 老板电器携手华为HarmonyOS创新升级中国厨房新理念
  17. adb无法连接上夜神模拟器夜神模拟器cannot connect to 127.0.0.1:62001: 由于目标计算机积极拒绝,无法连接。 (10061)
  18. 闲来无事,做个了批量看图的页面
  19. HIS系统门急诊医保实时结算接口测试
  20. 对角矩阵的性质(diagonal matrix)

热门文章

  1. 缔造Android推送服务不死之身
  2. “智慧交通”转型升级+创新发展策略
  3. 【Codechef POLYEVAL Evaluate the polynomial】【FFT】
  4. spring boot实现ssm(1)功能
  5. Java的常量,main快捷方式以及输出语句的快捷方式
  6. 最后一夜的温柔与爱情无关
  7. 一直被模仿,从未被超越?从“小作坊”到世界五百强,小米做到了
  8. 【AES 算法】实现服务端 Java 加密,前端 JS 解密
  9. Vuforia AR 脱卡功能的实现
  10. AMD电脑安装TBC(Trimble Business Center)