HDU 3086 马拉车模板
模板,但是对这个算法还是不太清楚,真实不明觉厉....
#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 马拉车模板的更多相关文章
- hdu 3068 最长回文子串 马拉车模板
前几天用后缀数组写过一次这题,毫无疑问很感人的TLE了-_-|| 今天偶然发现了马拉车模板,O(N)时间就搞定 reference:http://acm.uestc.edu.cn/bbs/read.p ...
- hdu 1686 KMP模板
// hdu 1686 KMP模板 // 没啥好说的,KMP裸题,这里是MP模板 #include <cstdio> #include <iostream> #include ...
- HDU 2138 Miller-Rabin 模板题
求素数个数. /** @Date : 2017-09-18 23:05:15 * @FileName: HDU 2138 miller-rabin 模板.cpp * @Platform: Window ...
- hdu 1348 凸包模板
http://acm.hdu.edu.cn/showproblem.php?pid=1348 造城墙问题,求出凸包加上一圈圆的周长即可 凸包模板题 #include <cstdio> #i ...
- hdu3068 最长回文 马拉车模板题
题目传送门 马拉车算法模板题. 学习博客 #include<bits/stdc++.h> #define clr(a,b) memset(a,b,sizeof(a)) using name ...
- HDU 1392 凸包模板题,求凸包周长
1.HDU 1392 Surround the Trees 2.题意:就是求凸包周长 3.总结:第一次做计算几何,没办法,还是看了大牛的博客 #include<iostream> #inc ...
- HDU 2586 (LCA模板题)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2586 题目大意:在一个无向树上,求一条链权和. 解题思路: 0 | 1 / \ 2 3 ...
- HDU 2082 母函数模板题
找单词 Time Limit: 1000MS Memory Limit: 32768KB 64bit IO Format: %I64d & %I64u Submit Status De ...
- HDU 2255 & KM模板
题意: 一张完备二分图求最优完备匹配. SOL: 这题就不讲什么sol了...毕竟是裸的KM,不会的话可以看老人家的大白鼠,一些问题看代码注释.讲讲经历(悲惨的经历) 刚打完,自信地交上去发现MLE. ...
随机推荐
- Python调用DLL动态链接库——ctypes使用
最近要使用python调用C++编译生成的DLL动态链接库,因此学习了一下ctypes库的基本使用. ctypes是一个用于Python的外部函数库,它提供C兼容的数据类型,并允许在DLL或共享库中调 ...
- Linux 通用数据结构说明
device_driver include/linux/device.h struct device_driver { const char * name; /* 驱动名称 * ...
- Redis理解和使用
摘抄并用于自查笔记 1. Redis简介 我们日常Java Web开发,一般使用数据库进行存储,在数据量较大的情况下,单一使用数据库保存数据的系统会因为面向磁盘,磁盘读写速度比较慢而存在严重的性能弊端 ...
- Python的字符串修改报错:TypeError: 'str' object does not support item assignment
Python中想修改字符串的最后一个字符,使用name[-1] = 'e'来实现,运行后报错. 报错内容是:TypeError: 'str' object does not support item ...
- CSS - 选择器相关
1. 标签选择器 /* 标签选择器 : 会将样式作用在当前网页所有的指定标签上 标签名 { 样式名1: 样式值1; 样式名2: 样式值2; ...... } */ table { width: 300 ...
- vuex mutation,action理解
1. 在store中分别注册mutation和action,action中用commit同步调用mutation来执行修改state,但是在组件中则使用dispatch异步调用action 2. 通俗 ...
- System.Web.Mvc.FilePathResult.cs
ylbtech-System.Web.Mvc.FilePathResult.cs 1.程序集 System.Web.Mvc, Version=5.2.3.0, Culture=neutral, Pub ...
- 观察属性$watch
<!DOCTYPE html> <html lang="zh"> <head> <title></title> < ...
- PHP-property_exists()函数
直接看代码 <?php header('content-type:text/html;charset=utf-8'); //property_exists说明 class A{ public $ ...
- JVM系列(四)— 原子性、可见性与有序性
上一篇讲了Java内存模型的相关知识,模型设计正是围绕着并发过程中如何处理原子性,可见性和有序性这3个特征来建立的 一.原子性(Atomicity) 原子性的概念无需多说,熟悉事物的4个特性的应该比较 ...