hdu 5785 Interesting(manacher+前缀和)

题目链接:hdu 5785 Interesting

题意:

有一个长度为n的串(n<=10^6),对 1 <= i <= j < k <= length(s) . 如果[i,j]和[j+1,k]都是回文串。则对答案的贡献为 i*k ,求贡献和。

题解:

详细题解传送门

 1 #include<bits/stdc++.h>
 2 #define F(i,a,b) for(int i=a;i<=b;++i)
 3 using namespace std;
 4 typedef long long ll;
 5 
 6 const int N=1e6+7,P=1e9+7;
 7 
 8 struct Manacher{
 9     char str[N*2];
10     int p[N*2],len,mx,id,tl,ans,i;
11     void maxlen(char *s){
12         len=strlen(s),mx=0,id=0,tl=0,str[tl++]='$',str[tl++]='#';
13         for(i=0;i<len;i++)str[tl++]=s[i],str[tl++]='#';
14         for(i=2,str[tl]=0,ans=0;i<tl;i++){
15             p[i]=mx>i?min(p[(id<<1)-i],mx-i):1;
16             while(str[i-p[i]]==str[i+p[i]])p[i]++;
17             if(i+p[i]>mx)mx=i+p[i],id=i;
18         }
19     }
20 }M;
21 char s[N];
22 int dp[N*2][4],ans;
23 
24 void add(int op,int l,int r,int v)
25 {
26     if(l>r)return;
27     dp[l][op]=(dp[l][op]+v)%P;
28     dp[r+1][op]=(dp[r+1][op]-v)%P;
29 }
30 
31 int main(){
32     while(~scanf("%s",s))
33     {
34         memset(dp,0,sizeof(dp));
35         M.maxlen(s);
36         F(i,1,M.tl-2)
37         {
38             add(0,i,M.p[i]+i-1,i);
39             add(1,i,M.p[i]+i-1,1);
40             add(2,i-M.p[i]+1,i,i);
41             add(3,i-M.p[i]+1,i,1);
42         }
43         F(j,1,M.tl)F(i,0,3)dp[j][i]=(dp[j][i]+dp[j-1][i]+P)%P;
44         ans=0;
45         for(int i=4;i<M.tl;i+=2)
46         {
47             ll a=(dp[i][2]-1ll*dp[i][3]*(i/2)%P+P)%P;
48             ll b=(dp[i-2][0]-1ll*dp[i-2][1]*((i-2)/2)%P+P)%P;
49             ans=(a*b%P+ans)%P;
50         }
51         printf("%d\n",ans);
52     }
53     return 0;
54 }
View Code

 

转载于:https://www.cnblogs.com/bin-gege/p/7215528.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/416341.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php 获取流文件大小,php获取文件大小详解

本文主要和大家分享php获取文件大小详解&#xff0c;希望能帮助到大家。通过filesize函数可以取得文件的大小&#xff0c;文件大小是以字节数表示的。$filename /data/webroot/usercode/code/resource/test.txt;$size filesize($filename);如果要转换文件大小的单位&#xff…

工作74:vue带参数跳转其他页面

1.准备好两个vue文件 panda.vue travel.vue 2.写index.js配置文件 import travel from /components/travel1{path: /travel/:id,name: 测试页面,component: travel}3.编写跳转前的页面 这是一个点击事件 gettravel(id) {this.$router.push({path: /travel/ id,})}},1234567 …

tomcat学习笔记——lifecycle(容器)启动都干了什么

待写。。。 转载于:https://www.cnblogs.com/zjc-cnblogs/p/7217272.html

整数规划matlab实例,整数规划matlab

整数规划matlabTag内容描述&#xff1a;1、例已知非线性整数规划为max zx12x223x324x422x52-8x1-2x2-3x3-x4-2x5s.t.0xi99,i1,2,5x1x2x3x4x5400x12x22x3x46x58002x1x26x3200x3x45x5200(1)编写M文件mengte.m,定义目标函数f和约束向量函数g&#xff0c;程序如下&#xff1a;funct…

洛谷 3381 【模板】最小费用最大流

https://www.luogu.org/problem/show?pid3381 题目描述 如题&#xff0c;给出一个网络图&#xff0c;以及其源点和汇点&#xff0c;每条边已知其最大流量和单位流量费用&#xff0c;求出其网络最大流和在最大流情况下的最小费用。 输入输出格式 输入格式&#xff1a; 第一行包…

matlab impyramid,图像 – Matlab impyramid问题

如果您实际打开了impyramid并查看了源代码,那么归结为一个imresize调用.具体来说,当A被定义为图像时,在调用impyramid时使用expand时会发生这种情况&#xff1a;M size(A,1);N size(A,2);scaleFactor 2;outputSize 2*[M N] - 1;kernel makePiecewiseConstantFunction( ...…

回车键登录

用onkeydown 事件 传递事件对象event 使用事件对象里面的keycode 属性 event事件对象做兼容性 var evtwindow.event || event; function oEnter(event){ var evt window.event||event; if(evt.keyCode13){ checking1(); //按下回车键要执行的函数 }}转载于:https…

php redis.h,swoole安装hredis支持导致php不能加载swoole扩展

操作说明1、下载hiredis编译make -jsudo make installsudo ldconfig2、开始编译swoolephpize./configure --enable-async-redismake cleanmake -jsudo make install环境说明: 操作系统centos,swoole是1.9最新版 hredis也是最新的 ,php 是7.1加载swoole.so之后 重启php-fpm可以成…

matlab零相移滤波,零相移数字滤波器边界效应讨论(附程序与参考文献)

%零相移带通滤波器clcclose allclear all% 滤波器设计%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%N 100;%100秒t 0:0.001:N;%时间Fs 1000;%采样率% 滤波器通止参数设定&#xff1b;fp[0.1 15];fs [0.05 50];rp 1.5;rs 12;wp fp*2*pi/Fs;ws fs*2*pi/Fs;% 阶次&#x…

angularjs1-5,class,

<!DOCTYPE html> <html><head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><title>无标题文档</title><script type"text/javascript" src"angular.min.js"></…

自己定义ViewGroup控件(一)-----gt;流式布局进阶(一)

main.xml <?xml version"1.0" encoding"utf-8"?> <com.example.SimpleLayout.MyLinLayout xmlns:android"http://schemas.android.com/apk/res/android" xmlns:tools"http://schemas.android.com/tools" android:layout_wi…

oracle计算表的大小,简要分析估算oracle表的大小

查询oracle表的大小有几种方法&#xff0c;笔者简要分析下他们的异同环境&#xff0c;newsadmin.newlog&#xff0c;原本有244,459,078条记录&#xff0c;delete后&#xff0c;现在只有51,109,919记录。一、segmentsselect bytes/1024/1024/1024 from dba_segments where segme…

NOIP2007 count 统计数字

问题描述 某次科研调查时得到了n个自然数&#xff0c;每个数均不超过1.5109。已知不相同的数不会超过10000个&#xff0c;现在需要统计这些自然数各自出现的个数&#xff0c;并按照自然数从小到大的顺序输出统计结果。 输入 输入文件count.in包含n1行&#xff1b; 第一行是…

【C++11/17】std::map高效插入

我们在使用stl的映射容器std::map时&#xff0c;经常需要向容器中插入数据。由于map的元素key值是唯一的&#xff0c;我们经常遇到这样的场景&#xff1a; 向map中插入元素时&#xff0c;指定的key已经存在则直接更新&#xff1b;指定的key不存在&#xff0c;然后才做插入操作…