M - Mediocre String Problem Gym - 101981M
题意: 给你个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相关推荐
- Mediocre String Problem Gym - 101981M
https://cn.vjudge.net/problem/Gym-101981M 很容易tle #include <iostream> #include <cstring> ...
- Gym - 101981 Problem M. Mediocre String Problem (扩展KMP + Manacher)
Problem M. Mediocre String Problem 题目链接:https://vjudge.net/problem/Gym-101981M 题目大意:给出两个串S,T,从S中选择 i ...
- Mediocre String Problem(马拉车+扩展KMP)
文章目录 [Mediocre String Problem](https://codeforces.com/gym/101981) 题目大意 解题思路 代码 Mediocre String Probl ...
- 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 ...
- M - Mediocre String Problem( 扩展KMP + Manacher + 差分 )
M - Mediocre String Problem( 扩展KMP + Manacher + 差分 ) 题意:给出一个串S,和一个串T. 要求 从S串中取一个子串,后面接上T串的一个前缀 组成一个结 ...
- Problem M. Mediocre String Problem
Problem M. Mediocre String Problem(马拉车+拓展KMP) 题意:给一个S串一个T串, 问有多少个F(i, j, k),F(i, j, k) 的定义是S串选个下标i~j ...
- Gym_101981M Mediocre String Problem(exkmp+manachar)
Mediocre String Problem time limit per test:1 seconds memory limit per test:256 megabytes Problem De ...
- ACM-ICPC2018南京赛区 Mediocre String Problem
Mediocre String Problem 题解: 很容易想到将第一个串反过来,然后对于s串的每个位置可以求出t的前缀和它匹配了多少个(EXKMP 或者 二分+hash). 然后剩下的就是要处理以 ...
- 2018 ICPC 南京 M. Mediocre String Problem(ExKMP + Manacher / ExKMP+回文树)
2018 ICPC 南京 全文见:https://blog.csdn.net/qq_43461168/article/details/112796538 M. Mediocre String Prob ...
最新文章
- DropDownList--下拉菜单
- 2010年度报告:是谁在编写Linux内核?
- 【大连】2021年下半年软考报考时间及通知
- boost::lambda::constructor用法的测试程序
- python3.70_Python3 基本数据类型
- SecureCRT 用来当串口工具的设置
- AI评委引热议,阿里巴巴表示:AI不会取代工程师
- 在服务器上远程使用tensorboard查看训练loss和准确率
- 做大公司的螺丝钉 vs 当小公司的多面手
- ios7以后隐藏状态栏
- 三星关闭在华最后一家电脑厂 约850名员工受影响
- 一个普通类就能干趴你的springboot,你信吗?
- 关于python的多线程和多进程_Python的多线程和多进程
- 单层感知器python_深度学习之单层感知器(一)
- 文件复制到u盘后文件夹是空的,怎么恢复?
- 老板电器携手华为HarmonyOS创新升级中国厨房新理念
- adb无法连接上夜神模拟器夜神模拟器cannot connect to 127.0.0.1:62001: 由于目标计算机积极拒绝,无法连接。 (10061)
- 闲来无事,做个了批量看图的页面
- HIS系统门急诊医保实时结算接口测试
- 对角矩阵的性质(diagonal matrix)
热门文章
- 缔造Android推送服务不死之身
- “智慧交通”转型升级+创新发展策略
- 【Codechef POLYEVAL Evaluate the polynomial】【FFT】
- spring boot实现ssm(1)功能
- Java的常量,main快捷方式以及输出语句的快捷方式
- 最后一夜的温柔与爱情无关
- 一直被模仿,从未被超越?从“小作坊”到世界五百强,小米做到了
- 【AES 算法】实现服务端 Java 加密,前端 JS 解密
- Vuforia AR 脱卡功能的实现
- AMD电脑安装TBC(Trimble Business Center)