BZOJ2084 [Poi2010] Antisymmetry题解(manacher算法)
时间:2019-01-11
本文章向大家介绍BZOJ2084 [Poi2010] Antisymmetry题解(manacher算法),主要包括BZOJ2084 [Poi2010] Antisymmetry题解(manacher算法)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目:BZOJ2084.
题目大意:给定一个01串,定义,问回文子串数量.
manacher裸题,重新定义一下匹配,然后每个点为对称中心最长回文子串长度,求累加和即可.不过注意只有偶数长度的串才会有贡献.
代码如下:
#include<bits/stdc++.h>
using namespace std;
#define Abigail inline void
typedef long long LL;
const int N=500000;
char tmp[N*2+9];
int pal[N*2+9];
LL manacher(char *s,int len){
LL ans=0;
for (int i=1;i<=len;++i)
tmp[i<<1]=s[i],tmp[i<<1|1]='#';
tmp[1]='-';tmp[0]='#';
len=len<<1|1;
int p=0,r=0;
for (int i=1;i<=len;i+=2){
pal[i]=r>i?min(pal[p*2-i],r-i):1;
while (tmp[i+pal[i]]=='#'&&tmp[i-pal[i]]=='#'||(tmp[i+pal[i]]^tmp[i-pal[i]])==1) ++pal[i];
if (i+pal[i]>r) r=i+pal[i],p=i;
}
for (int i=3;i<len;i+=2) ans+=LL(pal[i]>>1);
return ans;
}
char s[N+9];
int n;
Abigail into(){
scanf("%d",&n);
scanf("%s",s+1);
}
Abigail outo(){
printf("%lld\n",manacher(s,n));
}
int main(){
into();
outo();
return 0;
}
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 突击并发编程JUC系列-并发工具 Semaphore
- 构建Linux根文件系统
- ARM指令ldr和adr的区别
- 挂载文件系统出现"kernel panic..." 史上最全解决方案
- 汇编程序调用c函数为什么需要设置栈?
- Uboot到底如何启动内核
- Flink部署及作业提交(On YARN)
- Flink部署及作业提交(On Flink Standalone)
- MySQL题集
- 《深入浅出SQL》问答录
- Python_字典实现简单预约系统
- java_二维数组简单快递系统
- RabbitMQ六种工作模式
- Java生成随机姓名、性别和年龄
- 商业数据分析从入门到入职(8)Python模块、文件IO和面向对象