模板,但是对这个算法还是不太清楚,真实不明觉厉....

 #include <iostream>
#include <cstdio>
#include <string.h>
#pragma warning ( disable : 4996 )
using namespace std; inline int Max(int a,int b) { return a>b?a:b; }
inline int Min(int a,int b) { return a>b?b:a; }
const int inf = 0x3f3f3f3f;
const int maxn = 1e5+1e4+; char str[maxn];
char nstr[maxn<<];
int maxlen[maxn<<];
int len, plen, ans; void init()
{
memset( nstr, , sizeof(nstr) );
memset( maxlen, , sizeof(maxlen) );
len = strlen(str);
nstr[] = '$'; nstr[] = '#'; int j = ;
for ( int i = ; i < len; i++ )
{
nstr[j++] = str[i];
nstr[j++] = '#';
}
nstr[j] = '\0';
plen = j;
} void solve()
{
ans = -;
int id, mx = ; for ( int i = ; i < plen; i++ )
{
if( i < mx )
maxlen[i] = Min( maxlen[*id-i], mx-i );
else
maxlen[i] = ; while( nstr[i-maxlen[i]] == nstr[i+maxlen[i]] )
maxlen[i]++; if ( mx < i + maxlen[i] )
{
id = i;
mx = i + maxlen[i];
}
ans = Max(ans, maxlen[i]-);
}
} int main()
{
while ( ~scanf("%s", str) )
{
init();
solve();
printf( "%d\n", ans );
}
return ;
}

又做了一道几乎模板的题(吉哥系列故事——完美队形II),终于对马拉车有点理解了,这算法实在太巧妙了!

和模板几乎一样,只不过增多了个左半边要升序排列罢了

 #include <iostream>
#include <cstdio>
#include <string.h>
#pragma warning ( disable : 4996 )
using namespace std; inline int Max(int a,int b) { return a>b?a:b; }
inline int Min(int a,int b) { return a>b?b:a; }
const int inf = 0x3f3f3f3f;
const int maxn = 1e5+; int maxl[maxn<<];
int str[maxn], nstr[maxn<<];
int N, ans, plen; void init()
{
memset( maxl, , sizeof(maxl) );
memset( nstr, , sizeof(nstr) );
nstr[] = ; nstr[] = -; int j = ;
for( int i = ; i < N; i++ )
{ nstr[j++] = str[i]; nstr[j++] = -; }
nstr[j] = -;
plen = j;
} void solve()
{
ans = -;
int id, mx = ;
for ( int i = ; i < plen; i++ )
{
if(i < mx)
maxl[i] = Min(maxl[*id-i], mx-i);
else
maxl[i] = ; while( nstr[i-maxl[i]]==nstr[i+maxl[i]] && nstr[i-maxl[i]]<=nstr[i-maxl[i]+] )
maxl[i]++;
if(mx < i + maxl[i])
{ id = i; mx = i + maxl[i]; } ans = Max(ans, maxl[i]-);
}
} int main()
{
int all; cin >> all;
while (all--)
{
cin >> N;
for( int i = ; i < N; i++ )
scanf( "%d", &str[i] );
init();
solve(); printf( "%d\n", ans );
}
return ;
}

HDU 3086 马拉车模板的更多相关文章

  1. hdu 3068 最长回文子串 马拉车模板

    前几天用后缀数组写过一次这题,毫无疑问很感人的TLE了-_-|| 今天偶然发现了马拉车模板,O(N)时间就搞定 reference:http://acm.uestc.edu.cn/bbs/read.p ...

  2. hdu 1686 KMP模板

    // hdu 1686 KMP模板 // 没啥好说的,KMP裸题,这里是MP模板 #include <cstdio> #include <iostream> #include ...

  3. HDU 2138 Miller-Rabin 模板题

    求素数个数. /** @Date : 2017-09-18 23:05:15 * @FileName: HDU 2138 miller-rabin 模板.cpp * @Platform: Window ...

  4. hdu 1348 凸包模板

    http://acm.hdu.edu.cn/showproblem.php?pid=1348 造城墙问题,求出凸包加上一圈圆的周长即可 凸包模板题 #include <cstdio> #i ...

  5. hdu3068 最长回文 马拉车模板题

    题目传送门 马拉车算法模板题. 学习博客 #include<bits/stdc++.h> #define clr(a,b) memset(a,b,sizeof(a)) using name ...

  6. HDU 1392 凸包模板题,求凸包周长

    1.HDU 1392 Surround the Trees 2.题意:就是求凸包周长 3.总结:第一次做计算几何,没办法,还是看了大牛的博客 #include<iostream> #inc ...

  7. HDU 2586 (LCA模板题)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2586 题目大意:在一个无向树上,求一条链权和. 解题思路: 0 | 1 /   \ 2      3 ...

  8. HDU 2082 母函数模板题

    找单词 Time Limit: 1000MS   Memory Limit: 32768KB   64bit IO Format: %I64d & %I64u Submit Status De ...

  9. HDU 2255 & KM模板

    题意: 一张完备二分图求最优完备匹配. SOL: 这题就不讲什么sol了...毕竟是裸的KM,不会的话可以看老人家的大白鼠,一些问题看代码注释.讲讲经历(悲惨的经历) 刚打完,自信地交上去发现MLE. ...

随机推荐

  1. 7_3.springboot2.x启动配置原理_3.事件监听机制

    事件监听机制配置在META-INF/spring.factories ApplicationContextInitializer SpringApplicationRunListenerioc容器中的 ...

  2. C# SQL 多条件查询技巧

    #region 多条件搜索时,使用List集合来拼接条件(拼接Sql) StringBuilder sql = new StringBuilder("select * from PhoneN ...

  3. 面试系列24 dubbo负载均衡策略和集群容错策略

    (1)dubbo负载均衡策略 1)random loadbalance 默认情况下,dubbo是random load balance随机调用实现负载均衡,可以对provider不同实例设置不同的权重 ...

  4. wget: command not found 解决方案

    wget: command not found 解决方案 wget command not found 解决方案 问题分析 解决方案 方法一yum安装wget 方法二rpm安装 问题分析 安装的是Ce ...

  5. tip:删除数组中的undefined

    this.checkedImg = this.checkedImg.filter(Boolean)

  6. 使用Java代码获取Java进程ID的方法

    需要jre/lib下的tools.jar包 public class Test { public static void main(String[] args) throws Exception {  ...

  7. springcloud(十):Hystrix工作流程分析

    通过Netflix Hystrix官方公布的流程图,我们来了解一下Hystrix的工作流程 1.创建HystrixCommand对象或者HystrixObservableCommand对象 首先创建一 ...

  8. C++面向对象高级编程(下)第一周-Geekband

    勿在浮沙筑高台 革命尚未成功,同志仍需努力 <h1> Conversion Function</h1> class Fraction { public: Fraction(in ...

  9. 01.Hibernate快速入门

    第一步:下载Hibernate5的运行环境 https://sourceforge.net/projects/hibernate/files/hibernate-orm/ 第二步:在数据库创建表 Cr ...

  10. [转]WPF and Silverlight 学习笔记(二十五):使用CollectionView实现对绑定数据的排序、筛选、分组

    在第二十三节,我们使用CollectionView实现了对于绑定数据的导航,除导航功能外,还可以通过CollectionView对数据进行类似于DataView的排序.筛选等功能. 一.数据的排序: ...