多校1005 HDU5785 Interesting (manacher)

时间:2023-02-15 12:22:12
 // 多校1005 HDU5785 Interesting
// 题意:给你一个串,求相邻两个回文串左边端点*右边端点的和
// 思路:马拉车算出最长回文半径,求一个前缀和,既得到每个点对答案的贡献。
// ans=L[i]*R[i-1]
// L[i] 以i开始的所有回文串结尾坐标的和
// R[i] 以i结尾的所有回文串开始坐标的和
// 这题我们关键是求L[] R[]
// 另开两个数组a[] b[] 分别记录当前点对答案贡献 和每个点出现的次数 // #pragma comment(linker, "/STACK:102c000000,102c000000")
#include <iostream>
#include <cstdio>
#include <cstring>
#include <sstream>
#include <string>
#include <algorithm>
#include <list>
#include <map>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
#include <cstdlib>
// #include <conio.h>
using namespace std;
#define clc(a,b) memset(a,b,sizeof(a))
#define inf 0x3f3f3f3f
#define lson l,mid,rt<<1
// #define rson mid+1,r,rt<<1|1
const int N = 1e6+;
const int MOD = 1e9+;
#define LL long long
#define LB long double
// #define mi() (l+r)>>1
double const pi = acos(-);
const double eps = 1e-;
void fre(){freopen("in.txt","r",stdin);}
inline int read(){int x=,f=;char ch=getchar();while(ch>''||ch<'') {if(ch=='-') f=-;ch=getchar();}while(ch>=''&&ch<='') { x=x*+ch-'';ch=getchar();}return x*f;} char str[N];
char s[N<<];
int Len[N<<];
void Manacher(int n){
clc(s,'#');
for(int i=;i<n;i++)
s[i*+]=str[i];
int len=n*+;s[]='$';
int mx=,po=;
for(int i=;i<=len;i++) {
if(mx>i)
Len[i]=min(Len[po*-i],mx-i);
else Len[i]=;
while(s[i+Len[i]]==s[i-Len[i]]) Len[i]++;
if(i+Len[i]>mx) { mx=i+Len[i];po=i;}
}
} LL a[N<<],b[N<<];
LL L[N],R[N];
int main(){
while(~scanf("%s",str)){
int len=strlen(str);
Manacher(len);
len=(len<<)+;
for(int i=;i<=len;i++) a[i]=,b[i]=;
for(int i=len;i>=;i--){
a[i-Len[i]+]+=i;
a[i+]-=i;
b[i-Len[i]+]++;
b[i+]--;
}
LL a1=,a2=;
for(int i=;i<=len;i++){
a1+=a[i],a2+=b[i];
if(i%==)
L[i/]=(a1-a2*i/)%MOD;
} for(int i=;i<=len;i++) a[i]=,b[i]=;
a1=,a2=;
for(int i=len;i>=;i--){
a[i]+=i;
a[i+Len[i]]-=i;
b[i]++;
b[i+Len[i]]--;
}
for(int i=;i<=len;i++){
a1+=a[i],a2+=b[i];
if(i%==)
R[i/]=(a1-a2*i/)%MOD;
} LL ans=;
for(int i=;i<=len/;i++){
ans=(ans+L[i]*R[i-]%MOD)%MOD;
}
printf("%I64d\n",ans);
}
return ;
}

多校1005 HDU5785 Interesting (manacher)的更多相关文章

  1. HDU5785 Interesting(Manacher &plus; 延迟标记)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5785 Description Alice get a string S. She think ...

  2. 【HDU5785】Interesting &lbrack;Manacher&rsqb;

    Interesting Time Limit: 30 Sec  Memory Limit: 256 MB[Submit][Status][Discuss] Description Input Outp ...

  3. HDU-5785 Interesting(Manacher算法&plus;区间处理)

    题目大意:给一个字符串,求所有相邻两回文子串的外侧下标之积的和 题目分析:另L[i]为所有以 i 为右端点的回文字串的左端点之和,同理,另R[i]表示所有以 i 为左端点的回文子串的右端点之和.显然, ...

  4. HDU 4690 EBCDIC (2013多校 1005题 胡搞题)

    EBCDIC Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 102400/102400 K (Java/Others)Total Su ...

  5. 2015 多校联赛 ——HDU5371(manacher &plus; 枚举)

    Sample Input 1 10 2 3 4 4 3 2 2 3 4 4   Sample Output Case #1: 9 要求找出一段数字. 将其分成3部分,第①和第②部分成回文字串,第②和第 ...

  6. Interesting &lpar;manacher &plus; 前缀和处理&rpar;

    题意:相邻的两端回文串的价值为两个回文串总的区间左端点 × 区间右端点.然后计算目标串中所有该情况的总和. 思路:首先用manacher求出所有中心点的最大半径,然后我们知道对于左区间我们把贡献记录在 ...

  7. HDU 5785 Interesting manacher &plus; 延迟标记

    题意:给你一个串,若里面有两个相邻的没有交集的回文串的话,设为S[i...j] 和 S[j+1...k],对答案的贡献是i*k,就是左端点的值乘上右端点的值. 首先,如果s[x1....j].s[x2 ...

  8. python库-collections模块Counter类

    Counter类主要是用来跟踪值出现的次数.它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value. demo: all_words = [] # 列表里面是汉字(可 ...

  9. 多校赛3- Solve this interesting problem 分类: 比赛 2015-07-29 21&colon;01 8人阅读 评论&lpar;0&rpar; 收藏

    H - Solve this interesting problem Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I ...

随机推荐

  1. ThinkPHP学习总结

    ThinkPHP学习总结 网站开发使用的thinkPHP5.0在此总结备查 MVC关系功能图 一.Thinkphp开发规范 l 类 类库.函数文件统一以.php为后缀: 类的文件名均以命名空间定义,并 ...

  2. MySQL MVCC&lpar;多版本并发控制&rpar;

    概述 为了提高并发MySQL加入了多版本并发控制,它把旧版本记录保存在了共享表空间(undolog),当事务提交之后将重做日志写入磁盘(前提innodb_flush_log_at_trx_commit ...

  3. ftp

    1.url的确定 string ftpServerIP = "29.184.249.98"; string path=new Uri("ftp://"+ftpS ...

  4. ASP&period;NET Web API中的参数绑定总结

    ASP.NET Web API中的action参数类型可以分为简单类型和复杂类型. HttpResponseMessage Put(int id, Product item) id是int类型,是简单 ...

  5. c语言中的fgets函数

    fgets()函数用于从文件流中读取一行或指定个数的字符,其原型为: char * fgets(char * string, int size, FILE * stream); 参数说明:string ...

  6. Codeforces Round &num;261 &lpar;Div&period; 2&rpar; B

    链接:http://codeforces.com/contest/459/problem/B B. Pashmak and Flowers time limit per test 1 second m ...

  7. JavaWeb学习记录(二十五)——权限管理总结

    一.面向对象思想简化数据库操作 public List<Role> getObjectsByIds(List<AdminRole> adminRoles) {        L ...

  8. MVC ckeditor的基本使用

    之前在自己的WebForm练习项目里面用到过ckeditor,时隔蛮久后,今天再一次把ckeditor运用到MVC里面,用于最近着手开发的企业站的新闻动态的内容之新增与修改. 找到的资料都说要把下载的 ...

  9. Sqli-labs less 45

    Less-45 同样的,45关与43关的payload是一样的,只不过45关依旧没有报错信息. 登录 username:admin Password:c');create table less45 l ...

  10. SpringMVC原理及非注解配置详解

    1. Spring介绍 Spring MVC是Spring提供的一个强大而灵活的web框架.借助于注解,Spring MVC提供了几乎是POJO的开发模式,使得控制器的开发和测试更加简单. 这些控制器 ...