Gym - 101981M The 2018 ICPC Asia Nanjing Regional Contest M.Mediocre String Problem Manacher+扩增KMP
题意:给你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的更多相关文章
- Gym - 101981K The 2018 ICPC Asia Nanjing Regional Contest K.Kangaroo Puzzle 暴力或随机
题面 题意:给你1个20*20的格子图,有的是障碍有的是怪,你可以每次指定上下左右的方向,然后所有怪都会向那个方向走, 如果2个怪撞上了,就融合在一起,让你给不超过5w步,让所有怪都融合 题解:我们可 ...
- Gym - 101981G The 2018 ICPC Asia Nanjing Regional Contest G.Pyramid 找规律
题面 题意:数一个n阶三角形中,有多少个全等三角形,n<=1e9 题解:拿到题想找规律,手画开始一直数漏....,最后还是打了个表 (打表就是随便定个点为(0,0),然后(2,0),(4,0), ...
- Gym - 101981I The 2018 ICPC Asia Nanjing Regional Contest I.Magic Potion 最大流
题面 题意:n个英雄,m个怪兽,第i个英雄可以打第i个集合里的一个怪兽,一个怪兽可以在多个集合里,有k瓶药水,每个英雄最多喝一次,可以多打一只怪兽,求最多打多少只 n,m,k<=500 题解:显 ...
- Gym - 101981D The 2018 ICPC Asia Nanjing Regional Contest D.Country Meow 最小球覆盖
题面 题意:给你100个三维空间里的点,让你求一个点,使得他到所有点距离最大的值最小,也就是让你找一个最小的球覆盖掉这n个点 题解:红书模板题,这题也因为数据小,精度也不高,所以也可以用随机算法,模拟 ...
- 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 ...
- 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 ...
- 2018 ICPC Asia Jakarta Regional Contest
题目传送门 题号 A B C D E F G H I J K L 状态 Ο . . Ο . . Ø Ø Ø Ø . Ο Ο:当场 Ø:已补 . : 待补 A. Edit Distance Thin ...
- 2018 ICPC Asia Singapore Regional A. Largest Triangle (计算几何)
题目链接:Kattis - largesttriangle Description Given \(N\) points on a \(2\)-dimensional space, determine ...
- 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 ...
随机推荐
- 【centOS7】Jenkins安装--漫漫踩坑路
安装步骤: https://www.cnblogs.com/h--d/p/5673085.html 安装后遇到的问题及解决办法: jenkins的admin用户的初始密码路径 https://blog ...
- SQL查询性能优化
使用高效的查询 使用 EXISTS 代替 IN -- 查询A表中同时存在B表的数据 -- 慢 SELECT * FROM Class_A WHERE id IN (SELECT id FROM Cla ...
- Python培训时长多久可以学会?马哥教育9年经验之谈
在Python成为一门炙手可热的语言之后,很多人也开始准备向这个行业发展.技术入行也就是培训和自学两条路,各有优劣,不过培训因为学习比较系统比较快也受到不少人欢迎. 今天我就来给大家分享一下Pytho ...
- 源码安装apache脚本
#!/bin/bash#By:zhaocheng#Date:2019-01-18 [ -d /media/cdrom ] || mkdir /media/cdrom[ -d /media/cdrom/ ...
- 使用Autofac 依赖注入及 swagger 之startup配置
言语有限,代码如下: public IServiceProvider ConfigureServices(IServiceCollection services) { services .AddCor ...
- WEB 移动端 CSS3动画性能 优化
很多时候,我们在开发移动端的时候要使自己的网页兼容不同的机型,很多时候会采用CSS3动画,但是很多时候在安卓机下,动画明显会出现卡顿,很难看,那么这里我介绍几个CSS 属性进行硬件加速那么就会得到明显 ...
- 【codeforces 785D】Anton and School - 2
[题目链接]:http://codeforces.com/contest/785/problem/D [题意] 给你一个长度为n的括号序列; 让你删掉若干个括号之后,整个序列变成前x个括号为左括号,后 ...
- 洛谷 P2155 BZOJ 2186 codevs 2301 [SDOI2008]沙拉公主的困惑
题目描述 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M!互质的钞票.房地产第一大户沙拉公主决定预测一下大富翁国现在所有真钞票的 ...
- RestEasy 用户指南----第4章.使用@Path @GET @POST 等
转载说明出处:http://blog.csdn.net/nndtdx/article/details/6870391 原文地址 http://docs.jboss.org/resteasy/docs/ ...
- GPS时间系统概述和世界时系统
6.1 GPS时间系统概述 时间包含"时刻"和"时间间隔"2个概念.所谓时刻,即发生某一现象的瞬间.在天文学和卫星定位中.与所获数据对应的时刻也称为历元.时间 ...