cf245H Queries for Number of Palindromes (manacher+dp)
2024-10-19 01:33:12
首先马拉车一遍(或者用hash),再做个前缀和处理出f[i][j]表示以j为右端点,左端点在[i,j]的回文串个数
然后设ans[i][j]是[i,j]之间的回文串个数,那就有ans[i][j]=ans[i][j-1]+f[i][j]
#include<bits/stdc++.h>
#define pa pair<int,int>
#define CLR(a,x) memset(a,x,sizeof(a))
using namespace std;
typedef long long ll;
const int maxn=; inline ll rd(){
ll x=;char c=getchar();int neg=;
while(c<''||c>''){if(c=='-') neg=-;c=getchar();}
while(c>=''&&c<='') x=x*+c-'',c=getchar();
return x*neg;
} int rad[maxn<<],N,Q,ans[maxn][maxn];
int f[maxn][maxn];
char s[maxn<<]; int main(){
int i,j,k;
scanf("%s",s+);N=strlen(s+);
for(i=N;i;i--){
s[i<<]=s[i];s[i<<|]='#';
}s[]='#',s[]='!';
int a=,p=;
for(i=;i<=(N<<|);i++){
rad[i]=p>=i?min(p-i+,rad[*a-i]):;
while(s[i+rad[i]]==s[i-rad[i]]) rad[i]++;
if(i+rad[i]->p) p=i+rad[i]-,a=i;
for(j=;j<=rad[i];j++){
if(s[i+j-]!='#') f[(i-j+)>>][(i+j-)>>]=;
}
}
for(i=;i<=N;i++){
for(j=i;j;j--) f[j][i]+=f[j+][i];
}
for(i=;i<=N;i++){
for(j=i;j<=N;j++){
ans[i][j]=ans[i][j-]+f[i][j];
}
}
Q=rd();
for(i=;i<=Q;i++){
int a=rd(),b=rd();
printf("%d\n",ans[a][b]);
}
return ;
}
最新文章
- python统计某一个进程名所占用的内存
- Java虚拟机内存管理原理基础入门
- 【iCore3双核心板】【4.3寸液晶驱动板爆照!】
- 新书发布《大数据时代的IT架构设计》
- String、StringBuffer、StringBuilder源码解读
- javascript继承(二)—创建对象的三种模式
- Delphi 线程同步技术(转)
- Android学习笔记之AndroidManifest.xml文件解析
- Hadoop的shell脚本分析
- Ajax请求ashx 返回 json 格式数据常见问题
- Spring配置多个数据源
- 【案例】舒邑:一个女装品牌的奇葩打法-@i黑马
- 运行Jmeter.bat出错:Not able to find java executor or version. Please check your installation. errorlevel=2
- POJ 1625 Censored! [AC自动机 高精度]
- 三色GDOI
- 利用TortoiseGit(小乌龟)将项目上传至GitHub网站
- linux的基本操作(LAMP环境搭建)
- JmsTemplate sendAndReceive 设置超时
- maven入门安装及HelloWorld实现
- Java IO流学习总结一:输入输出流
热门文章
- Nginx负载均衡各种配置方式
- How to Configure Email Notification in Jenkins
- mysql 5.7:show_compatibility_56
- jmeter 启动jmeter-server.bat远程调用报错: java.io.FileNotFoundException: rmi_keystore.jks (系统找不到指定的文件。)
- 安装 Tesserocr (填坑)
- python中的__init__和__new__的区别
- Yii2的save()方法容易出错的地方
- 二、kubernetes
- word2vec训练&;IC分词(待)
- html class选择器与id选择器