题面

题意:给你2个串(长度1e6),在第一个串里找“s1s2s3”,第二个串里找“s4”,拼接后,是一个回文串,求方案数

题解:知道s1和s4回文,s2和s3回文,所以我们枚举s1的右端点,s1的长度乘以s2起始点为左边界的回文串的数量,累加就是答案。

所以先求s1,再求以每个点为左边界的回文串的数量

就是求每个后缀匹配第二个串的LCP(扩展kmp,或者hash+二分)二的话,后面部分用(Manacher+前缀和)就可以解决

 #include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+;
char str[maxn*],t[maxn*],s[maxn*];
int dp[maxn*],dpnext[maxn*],dpret[maxn*],suffix[maxn*],last[maxn];
void manacher(char tmp[],int length,int rad[])
{
for(int i=,j=,k;i<length;i+=k)
{
while(tmp[i-j-]==tmp[i+j+]) j++;
rad[i]=j;
for(k=;k<=rad[i]&&rad[i-k]!=rad[i]-k;++k)
{
rad[i+k]=min(rad[i-k],rad[i]-k);
}
j=max(j-k,);
}
}
void ExtendedKMP(char *a,char *b,int M,int N,int *Next,int *ret)
{
int i,j,k;
for(j=;+j<M&&a[j]==a[+j];j++);
Next[]=j;
k=;
for(i=;i<M;i++)
{
int Len=k+Next[k],L=Next[i-k];
if(L<Len-i)
{
Next[i]=L;
}
else
{
for(j=max(,Len-i);i+j<M&&a[j]==a[i+j];j++);
Next[i]=j;
k=i;
}
}
for(j=;j<N&&j<M&&a[j]==b[j];j++);
ret[]=j;
k=;
for(i=;i<N;i++)
{
int Len=k+ret[k],L=Next[i-k];
if(L<Len-i)
{
ret[i]=L;
}
else
{
for(j=max(,Len-i);j<M&&i+j<N&&a[j]==b[i+j];j++);
ret[i]=j;
k=i;
}
}
}
int main()
{
int i,j,k,n,m,lens,lent;
scanf(" %s",str);
scanf(" %s",t);
lens=strlen(str);
lent=strlen(t);
reverse(str,str+lens);
s[]='(';s[]='#';
for(i=,j=;i<lens;i++,j+=)
{
s[j]=str[i];
s[j+]='#';
}
n=lens;
lens=lens*+;
s[lens-]=')';
manacher(s,lens,dp);
ExtendedKMP(t,str,lent,n,dpnext,dpret);
suffix[lens]=;
memset(last,,sizeof(last));
for(i=;i<lens-;i++)
{
long long maxdis;
if(i%==)
{
maxdis=i/+dp[i]/-;
last[maxdis]++;
last[i/-]--;
}
else
{
maxdis=i/+dp[i]/-;
if(dp[i]/>)
{
last[maxdis]++;
last[i/-]-- ;
}
}
}
suffix[n]=;
for(i=n-;i>=;i--)
suffix[i]=suffix[i+]+last[i];
long long ans=;
for(i=;i<n;i++)
{
long long len=dpret[i];
ans=ans+len*(suffix[i-]);
}
printf("%lld\n",ans);
}

Gym - 101981M The 2018 ICPC Asia Nanjing Regional Contest M.Mediocre String Problem Manacher+扩增KMP的更多相关文章

  1. Gym - 101981K The 2018 ICPC Asia Nanjing Regional Contest K.Kangaroo Puzzle 暴力或随机

    题面 题意:给你1个20*20的格子图,有的是障碍有的是怪,你可以每次指定上下左右的方向,然后所有怪都会向那个方向走, 如果2个怪撞上了,就融合在一起,让你给不超过5w步,让所有怪都融合 题解:我们可 ...

  2. Gym - 101981G The 2018 ICPC Asia Nanjing Regional Contest G.Pyramid 找规律

    题面 题意:数一个n阶三角形中,有多少个全等三角形,n<=1e9 题解:拿到题想找规律,手画开始一直数漏....,最后还是打了个表 (打表就是随便定个点为(0,0),然后(2,0),(4,0), ...

  3. Gym - 101981I The 2018 ICPC Asia Nanjing Regional Contest I.Magic Potion 最大流

    题面 题意:n个英雄,m个怪兽,第i个英雄可以打第i个集合里的一个怪兽,一个怪兽可以在多个集合里,有k瓶药水,每个英雄最多喝一次,可以多打一只怪兽,求最多打多少只 n,m,k<=500 题解:显 ...

  4. Gym - 101981D The 2018 ICPC Asia Nanjing Regional Contest D.Country Meow 最小球覆盖

    题面 题意:给你100个三维空间里的点,让你求一个点,使得他到所有点距离最大的值最小,也就是让你找一个最小的球覆盖掉这n个点 题解:红书模板题,这题也因为数据小,精度也不高,所以也可以用随机算法,模拟 ...

  5. Gym - 101981J The 2018 ICPC Asia Nanjing Regional Contest J.Prime Game 计数

    题面 题意:1e6的数组(1<a[i]<1e6),     mul (l,r) =l × (l+1) ×...× r,  fac(l,r) 代表 mul(l,r) 中不同素因子的个数,求s ...

  6. Gym - 101981A The 2018 ICPC Asia Nanjing Regional Contest A.Adrien and Austin 简单博弈

    题面 题意:一堆有n个石子,编号从1⋯N排成一列,两个人Adrien 和Austin玩游戏,每次可以取1⋯K个连续编号的石子,Adrien先手,谁不能取了则输 题解:k==1时,显然和n奇偶相关,当k ...

  7. 2018 ICPC Asia Jakarta Regional Contest

    题目传送门 题号 A B C D E F G H I J K L 状态 Ο . . Ο . . Ø Ø Ø Ø . Ο Ο:当场 Ø:已补 .  :  待补 A. Edit Distance Thin ...

  8. 2018 ICPC Asia Singapore Regional A. Largest Triangle (计算几何)

    题目链接:Kattis - largesttriangle Description Given \(N\) points on a \(2\)-dimensional space, determine ...

  9. 2019 ICPC Asia Nanjing Regional

    2019 ICPC Asia Nanjing Regional A - Hard Problem 计蒜客 - 42395 若 n = 10,可以先取:6,7,8,9,10.然后随便从1,2,3,4,5 ...

随机推荐

  1. XML在线转化为JSON

    http://www.utilities-online.info/xmltojson/

  2. Redis 之消息发布与订阅(publish、subscribe)

    使用办法: 订阅端: Subscribe 频道名称 发布端: publish 频道名称 发布内容 一般做群聊,聊天室,发布公告信息等.

  3. CorelDRAW快速制作抖音幻影图像效果

    本教程讲解非常受欢迎的幻影图像效果(Anaglyph 3d),也叫图像分色立体效果,这其中我们要用到CorelDRAW中的透明度工具. 在开始实施Anaglyph效应之前,应当知道,Anaglyph  ...

  4. url取值乱码问题,url加中文导致页面不能加载问题 js unicode转码,以及解码

    很多时候写H5或其他适配时,打不开url.很多原因是因为浏览器不支持中文url,从url拿 出来的中文值也会乱码,这时候就必须把中文转化成Unicode值,去进行页面传值 中文转Unicode fun ...

  5. Java并发——阿里架构师是如何巧用线程池的!

    一.创建线程 1.创建普通对象,只是在JVM的堆里分配一块内存而已 2.创建线程,需要调用操作系统内核的API,然后操作系统需要为线程分配一系列资源,成本很高 线程是一个重量级对象,应该避免频繁创建和 ...

  6. JS对象中,在原型链上找到属性后 最终将值拷贝给原对象 而不是引用

    遇到一个面试题 要求写一个函数A,每次进行new操作时候能输出2,3,4,5... new A() // 输出2 new A() // 输出3 new A() // 输出4 function A() ...

  7. 百度编辑器ueditor1.4.3配置记录

    我从官网下载的php文件,但是图片上传不能用,后来查找资料,打开ueditor下的php/controller.php,(其他环境选对应的文件夹)把时区设置按如下改个字母大小写,再打开该文件就正确返回 ...

  8. Problem 21

    Problem 21 https://projecteuler.net/problem=21 Let d(n) be defined as the sum of proper divisors of  ...

  9. 【codeforces 514A】Chewbaсca and Number

    [题目链接]:http://codeforces.com/contest/514/problem/A [题意] 允许你把每个数字翻转 ->x变成9-x 然后问你能够变成的最小的数字是什么; 不能 ...

  10. (44). Spring Boot日志记录SLF4J【从零开始学Spring Boot】

    在开发中打印内容,使用 System.out.println() 和 Log4j 应当是人人皆知的方法了. 其实在开发中我们不建议使用 System.out 因为大量的使用 System.out 会增 ...