链接   http://acm.hunnu.edu.cn/online/?action=problem&type=show&id=11404&courseid=0

求 最长回文个数  并且输出 ; 虽然  O(n^2) 可过; 但 O(n) 是王道

看这个博客   http://www.cnblogs.com/wulangzhou/p/3449428.html

 #include<iostream>
#include<stdio.h>
#include<algorithm>
#include<cstring>
#include<cmath>
#define maxn 111000
using namespace std;
inline int min( int a,int b ){return a>b?b:a;}
inline int max( int a,int b ){return a>b?a:b;}
char cha[maxn],str[maxn*]; int pi[maxn*];
struct date{
int l,r,len;
bool operator <(const date &a)const{
if( a.len != len )return a.len < len;
else return a.r < r;
}
}node[];
void manacher( )
{
int len = strlen( str ); int mx = ; int id = ;
memset( pi,,sizeof(pi) );
for( int i = ; i < len; i++ )
{
if( mx > i )pi[i] = min( pi[id*-i],mx-i );
else pi[i] = ;
while( str[i-pi[i]] == str[i+pi[i]] )pi[i]++;
node[i].l = i-(pi[i]-); node[i].r = i+(pi[i]-); node[i].len = node[i].r - node[i].l + ;
if( i+pi[i] > mx )
{
mx = i+pi[i];
id = i;
}
}
}
int main( )
{
int T,cas = ; scanf("%d",&T);
while( T-- )
{
scanf("%s",&cha); int len = strlen( cha ); int k = ; str[k++] = '!';
for( int i = ; i < len; i++ )
str[k++] = '#',str[k++] = cha[i]; str[k++] = '#'; str[k] = '\0';
manacher( );
printf("Case #%d:\n",cas++);
sort( node,node+k ); len = node[].len;
if( len <= ){continue;}
for( int i = ; i < k; i++ )
if( node[i].len == len )
{
for( int j = node[i].l; j <= node[i].r; j++ )
if( str[j] != '#' )cout<<str[j];
cout<<endl;
}else break;
}
return ;
}
#include<iostream>
#include<stdio.h>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std; char str[2100],cha[2100];
int tab[2100];
void manacher( )
{
int Mx = 0; int id = 0; int len = strlen(cha);
memset(tab,0,sizeof(tab));
for( int i = 1; i < len; i++ )
{
if( i < Mx )
tab[i] = min( tab[id*2-i],Mx-i );
else tab[i] = 1;
while( cha[i+tab[i]] == cha[i-tab[i]] )tab[i]++;
tab[i]--;
if( Mx < i+tab[i] ){
Mx = i+tab[i];
id = i;
}
}
}
int main( )
{
int T,cas = 1; cin>>T;
while( T-- )
{
scanf("%s",&str); int len = strlen(str); int k = 0;
cha[k++] = '@';
for( int i = 0; i < len; i++ )
{cha[k++] = '#', cha[k++] = str[i];}
cha[k++] = '#'; cha[k] = '\0';
int Max = 0; manacher( ); printf("Case #%d:\n",cas++);
for( int i = 1; i < k; i++ )
if( cha[i] != '#' )Max = max( Max,(tab[i]/2)*2+1 );
else Max = max( Max,tab[i] );
if( Max <= 1 ){continue;}
for( int j = k-1; j >= 0; j-- )
{
if( (cha[j] == '#'&&tab[j]==Max) || (cha[j] != '#'&&(tab[j]/2)*2+1 == Max ) )
for( int i = j-tab[j]; i != j+tab[j]; i++ )
if( cha[i] != '#' )cout<<cha[i];
cout<<endl;
}
}
return 0;
}
/*
abacaba
*/

  

湖大 11404 manacher的更多相关文章

  1. 湖大OJ-实验E----可判定的DFA的空问题

    实验E----可判定的DFA的空问题 Time Limit: 1000ms, Special Time Limit:2500ms, Memory Limit:32768KB Total submit ...

  2. 湖大OJ-实验C----NFA转换为DFA

    实验C----NFA转换为DFA Time Limit: 1000ms, Special Time Limit:2500ms, Memory Limit:65536KB Total submit us ...

  3. ACM/ICPC 之 数论-费马大定理(HNUOJ 13371)

    好歹我是数学专业的学生,还是要写写训练的时候遇到的数学问题滴~~ 在ACM集训的时候在各高校OJ上也遇见过挺多的数学问题,例如大数的处理,素数的各种算法,几何问题,函数问题(单调,周期等性质),甚至是 ...

  4. 【转】赞一下huicpc035

    以下转自:http://hi.baidu.com/fpkelejggfbfimd/item/99421eaefa93a814a9cfb722 本来以为HNU的huicpc035和我一样退役了,后来听说 ...

  5. 【转】ACM/ICPC生涯总结暨退役宣言—alpc55

    转自:http://hi.baidu.com/accplaystation/item/ca4c2ec565fa0b7fced4f811 ACM/ICPC生涯总结暨退役宣言—alpc55 前言 早就该写 ...

  6. 一位ACM过来人的心得(转)

    励志下! 刻苦的训练我打算最后稍微提一下.主要说后者:什么是有效地训练? 我想说下我的理解.很多ACMer入门的时候,都被告知:要多做题,做个500多道就变牛了.其实,这既不是充分条件.也不会是必要条 ...

  7. 一位ACM过来人的心得

    刻苦的训练我打算最后稍微提一下.主要说后者:什么是有效地训练? 我想说下我的理解. 很多ACMer入门的时候,都被告知:要多做题,做个500多道就变牛了.其实,这既不是充分条件.也不会是必要条件. 我 ...

  8. 关于ACM,关于CSU

    原文地址:http://tieba.baidu.com/p/2432943599 前言: 即将进入研二,ACM的事情也渐渐远去,记忆终将模糊,但那段奋斗永远让人热血沸腾.开个贴讲讲ACM与中南的故事, ...

  9. 【转】 如何提高自己的acm个人能力

    2011-05-17 21:26 1429人阅读 评论(0) 收藏 举报 算法网络blog八卦游戏读书 转载自 简单de数字 最终编辑 fading_code by   zfy0701 本来以为HNU ...

随机推荐

  1. C# static方法-使用迭代器循环遍历文件中的额行

    //封装的方法 //读取文件的值,放入集合中 public static IEnumerable<string> ReadLines(string fileName) { using (T ...

  2. 项目中遇到的 linq datatable select

    1如何使用DataTable.Select选出来的Rows生成新的DataTable?DataTable dt = 数据源;DataTable dtt = new DataTable();dtt=dt ...

  3. 两个奇葩的C/C++问题

    今天为大家介绍几个奇葩的C/C++问题. 1 大家看看下面的输出结果是什么呢? #include <stdio.h> #include <stdlib.h>   void ma ...

  4. React-非dom属性-ref标签

    <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="UTF-8& ...

  5. ubuntu下搭建cocos2dx编程环境-上

        这大半年一直在开发flash游戏,用到的编程语言是actionscript和c++.所以这次公司决定开发手游端的话,C++不是很生疏,这是个好消息.坏消息是由于现在网页游戏还没有上线,所以公司 ...

  6. web appbuilder 改变样式和添加自定义widget

    一.改变样式 要实现的效果是添加cyan样式 1.将FoldableTheme/style下的cyan copy到TabTheme下的同一目录下: 2.打开TabTheme下的manifest,cop ...

  7. js学习之道:表单验证公共js

    /** 文件名称:CommonUtil.js 作者  : Yuce 编制时间: 2010-03-24 文件内容:一些常用的js公用类.工具类 包括方法: g_FormFieldIsNull    判断 ...

  8. git服务器gitlab之搭建和使用--灰常好的git服务器【转】

    转自:http://blog.csdn.net/zy416548283/article/details/38057925 git服务器比较有名的是gitosis和gitolite,这两个管理和使用起来 ...

  9. Ueditor上传图片到本地改造到上传图片到云存储

    作为新手说多了都是泪啊!我特别想记录一下作为菜鸟时的坑.看看以后是否会看着笑出来. 为什么要改到云存储上就不说了.好处多多. 视频教程上使用的又拍云同时也提到了七牛云.下来我自己也查了下.又拍云是试用 ...

  10. python3代码

    import urllib.request url="http://mm.taobao.com/json/request_top_list.htm?type=0&page=1&quo ...