【不可能的任务6/200】hdu3068马拉车

其实马拉车还真是最好理解的算法(感觉初中的时候好像讲过类似的,但是当时就没有认真听)

没想到一个简单的优化能变成O(n),感觉碉堡

不说了,马拉车裸题,我在写的时候只保留了id,没保留mx,希望能形成一种代码习惯吧

 1 #include <cstdio>
 2 int n;char ch;
 3 int p[220002];
 4 char a[220002];
 5 int min(int a,int b){return(a<b)?a:b;}
 6 int max(int a,int b){return(a>b)?a:b;}
 7 int get(int k){return (k&1)?p[k]/2*2:(p[k]+1)/2*2-1;}
 8 void add(int i)
 9 {
10     int u=i-p[i],v=i+p[i];
11     while((a[u]==a[v]) && (u>0) && (v<=n))
12         u--,v++,p[i]++;
13 }
14 int main()
15 {
16     while((ch<‘a‘ || ch>‘z‘)&&(ch!=EOF)) ch=getchar();
17     while(ch!=EOF)
18     {
19         n=1;a[1]=‘0‘;
20         for(;ch>=‘a‘ && ch<=‘z‘;ch=getchar())
21             a[++n]=ch,a[++n]=‘0‘;
22         int id=0;
23         for(int i=1;i<=n;i++)
24         {
25             if(i<id+p[id])
26             {
27                 p[i]=min(p[id*2-i],id+p[id]-i);
28                 if(i+p[i]==id+p[id])
29                     add(i);
30             }
31             else
32                 p[i]=1,add(i);
33             if(i+p[i]>p[id]+id)
34                 id=i;
35         }
36         int ans=0;
37         for(int i=1;i<=n;i++)
38             ans=max(ans,get(i));
39         printf("%d\n",ans);
40         while((ch<‘a‘ || ch>‘z‘)&&(ch!=EOF)) ch=getchar();
41     }
42     return 0;
43 }
时间: 2024-08-30 08:23:17

【不可能的任务6/200】hdu3068马拉车的相关文章

hdu3068 最长回文 马拉车模板题

题目传送门 马拉车算法模板题. 学习博客 #include<bits/stdc++.h> #define clr(a,b) memset(a,b,sizeof(a)) using namespace std; typedef long long ll; const int maxn=110010; char s[maxn<<1],ne[maxn<<1]; int p[maxn<<1],mx,maxx; int init(){ int len=strlen(s

马拉车算法 HDU3068

附上博客http://blog.csdn.net/muxidreamtohit/article/details/8865210 #include <iostream> #include <cstring> #include <cstdio> #include <cmath> using namespace std; int p[220010]; int n; char a[220010]; char c[110010]; void build_p() { i

微信小程序源码下载(200多个)

微信小程序源码下载汇总,点击标题进入对应的微信小程序下载页面. 最新 demo源码(点击标题进入帖子下载) 描述 1 微信小程序 会议室预定小程序 微信小程序 会议室预定小程序**** 本内容被作者隐藏 **** 2 微信小程序-双人五子棋小游戏 微信小程序-双人五子棋小游戏**** 本内容被作者隐藏 **** 3 打卡签到小程序 用微信小程序实现的一个简单的打卡签到的小程序拒绝 4 微信小程序---左滑删除 微信小程序---左滑删除**** 本内容被作者隐藏 **** 5 一个借钱的记事本的微

http协议的状态码 200、301、304、404、502 HTTP状态码解释

在网站建设的实际应用中,容易出现很多小小的失误,就像mysql当初优化不到位,影响整体网站的浏览效果一样,其实,网站的常规http状态码的表现也是一样,Google无法验证网站几种解决办法,提及到由于404状态页面设置不正常,导致了google管理员工具无法验证的情况,当然,影响的不仅仅是这一方面,影响的更是网站的整体浏览效果.因此,比较清楚详细的了解http状态码的具体含义,对于一个网站站长来说,这是很有必要俱备的网站制作基础条件. 如果某项请求发送到您的服务器要求显示您网站上的某个网页(例如

manacher马拉车算法

入门manacher最好文章:https://segmentfault.com/a/1190000003914228 我整理了模板代码:HDOJ3068马拉车模板 1 //讲解 https://segmentfault.com/a/1190000003914228 2 //manacher 算法模板 3 //求最长回文串 O(N) 4 #include <bits/stdc++.h> 5 using namespace std; 6 const int maxn=3e5+10; 7 char

15天倒计时:深度学习高端讲座免费听,最后200位赠教材名额!

深度学习是对使用多层神经网络过程进行机器学习的统称.目前已经被应用到图像识别,语音识别,自然语言处理,机器翻译等场景并取得了很好的行业应用效果. 由谷歌研发的新一代深度学习工具Tensor Flow,于2015年底正式向公众开源. Tensor Flow技术是当前最值钱,也是最便利的深度学习库! 目前已在谷歌.优步.京东.小米等公司中广泛应用! TensorFlow主要特性有: 使用灵活:TensorFlow是一个灵活的神经网络学习平台,采用图计算模型,支持High-Level的API,支持Py

http状态码204/206/200理解

HTTP的状态码有很多种,主要有1xx(临时响应).2xx(成功).3xx(已重定向).4xx(请求错误)以及5xx(服务器错误)五个大类,每个大类还对应一些具体的分类.平时我们接触比较多的是200.400.500等. 这里我们主要讨论一下状态码204,在HTTP RFC 2616中关于204的描述如下: If the client is a user agent, it SHOULD NOT change its document view from that which caused the

为页面增加滚动事件侦听,当页面滚动高度大于200,在页面右下方出现 返回顶部 按钮

1 <body> 2 <div style="height: 2000px;"></div> 3 <a href="#" id="backTop" style="display: none;position: fixed;bottom: 0;right: 0;">回到顶部</a> 4 <script> 5 window.addEventListener('

200行Python代码实现2048

200行Python代码实现2048 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到桌面上的程序: LX终端(LXTerminal): Linux命令行终端,打开后会进入Bash环境,可以使用Linux命令 GVim:非常好用的编辑器,最简单的用法可以参考课程Vim编辑器 3. 环境使用 使用GVim编辑器输入实验所需的代码及文件,使用LX终端(LXTerminal)运行所需命令进行操