题目链接:  http://codeforces.com/contest/335/problem/B

分析: 第一眼看上去串的长度为5*10^4, 冒似只能用O(n)的算法可解. 而这样的算法从来没见过......

其实不然, 注意一个条件"如果有存在长度为100的回文子串则输出长度为100的,否则输出最长的",

可以发现: 一个长度大于100的回文串都可以变成长度为100的

如: 长度为101的只要删除中间的一个就变为长度为100的,

长度为102的删除中间两个也变为长度为100的......

意思就是, 得到的结果串的长度一定小于等于100.

又因为原串中全为小写字母, 所以最多出现26个字母,

还可以发现, 当长度达到2600时, 肯定会出现长度为100回文子串, 因为肯定会有一个字母出现次数大于等于100

也就是说, 最终, 我们最后取2600个字母, 那么可以用O(n^2)(这里n<=2600) 算法...........

代码:

#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
const int maxn=2601;
int dp[maxn][maxn]; ///dp[i][j]表示区间[i,j]中回文子串的长度
int L[maxn][maxn];
int R[maxn][maxn];
int main(){ string s; cin>>s;
int len=min(maxn,(int)s.size());
for(int i=0;i<len;++i)
dp[i][i]=1;
for(int i=1; i<len; ++i)
for(int j=0; j+i<len; ++j) {
int k=j+i;
if(dp[j+1][k]>dp[j][k]) {
dp[j][k]=dp[j+1][k];
L[j][k]=j+1;
R[j][k]=k;
}
if(dp[j][k-1]>dp[j][k]) {
dp[j][k]=dp[j][k-1];
L[j][k]=j;
R[j][k]=k-1;
}
if(s[j]==s[k]&&dp[j+1][k-1]+2>dp[j][k]) {
dp[j][k]=dp[j+1][k-1]+2;
L[j][k]=j+1;
R[j][k]=k-1;
}
}
int ans=min(dp[0][len-1],100);
char ch[102]="";
int ls=0, rs=len-1;
int lc=0, rc=ans-1;
while(lc<=rc){
if(lc==rc){
ch[lc]=s[ls]; break;
}
if(s[ls]==s[rs]){
ch[lc]=ch[rc]=s[ls];
lc++; rc--;
ls++; rs--;
continue;
}
int lx=ls, rx=rs;
ls=L[lx][rx];
rs=R[lx][rx];
}
cout<<ch<<endl;
return 0;
}

codeforces MemSQL start[c]up Round 2 - online version B 最长公共子系列的更多相关文章

  1. MemSQL start[c]up Round 2 - online version C. More Reclamation(博弈)

    题目大意 额,写来写去,我还是直接说抽象之后的题目大意吧: 有一个 r*2 的矩形,两个人轮流的在矩形上面减去一个 1*1 的小正方形,要求在减的过程中,不能使矩形“断开”,也就是说,如果一个人减去了 ...

  2. MemSQL start[c]up Round 2 - online version(DP)

    只有小写字母 那>=2600的直接找单字母串长度大于等于100的就可以了 <2600 的dp找最长回文串 #include <iostream> #include<cst ...

  3. codeforces 673B B. Problems for Round(模拟)

    题目链接: B. Problems for Round time limit per test 2 seconds memory limit per test 256 megabytes input ...

  4. [codeforces Mail.Ru Cup 2018 Round 3][B Divide Candies ][思维+数学]

    https://codeforces.com/contest/1056/problem/B 题意:输入n,m    求((a*a)+(b*b))%m==0的(a,b)种数(1<=a,b<= ...

  5. [codeforces Mail.Ru Cup 2018 Round 1 D][ xor 操作]

    http://codeforces.com/contest/1054/problem/D 题目大意:一个序列a1 a2...an,可以对若干个元素进行取反,使所得的新序列异或和为0的区间个数最多. 题 ...

  6. MemSQL start[c]up Round 1 B题

    题目链接 http://codeforces.com/contest/325/problem/B 第一遍写了暴搜,果断TLE 然后上了二分,结果120组数据只有第40组过不了,我就写了奇怪的东西... ...

  7. codeforces VK Cup 2015 - Qualification Round 1 B. Photo to Remember 水题

    B. Photo to Remember Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/522/ ...

  8. MemSQL start[c]up Round 1.b

    二分查找题, 不知道用double的人,用LL果断错了... B. Stadium and Games time limit per test 1 second memory limit per te ...

  9. CodeForces 680A&680B&680C&680D Round#356

    昨天晚上实在是=_=困...(浪了一天)就没有去打Codeforces 中午醒来看看题,还不太难. A题:模拟(水题 3minAC) // by Sirius_Ren #include <cst ...

随机推荐

  1. python简单小爬虫爬取易车网图片

    上代码: import requests,urllib.request from bs4 import BeautifulSoup url = 'http://photo.bitauto.com/' ...

  2. Python之路,Day4 - Python基础4 (new版)

    Python之路,Day4 - Python基础4 (new版)   本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 ...

  3. springmvc学习笔记(理论)

    1.springmvc是什么? Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层 进行职责解耦,基 ...

  4. WebService简单使用

    1.创建Webservice服务应用程序 方式一:将VS2010采用的默认框架,改为使用框架.NET Framework2.0\3.0\3.5,这时新建"项目"or新建" ...

  5. python面对对象编程----------7:callable(类调用)与context(上下文)

    一:callables callables使类实例能够像函数一样被调用 如果类需要一个函数型接口这时用callable,最好继承自abc.Callable,这样有些检查机制并且一看就知道此类的目的是c ...

  6. 安装ZendDebugger 调试php

    一直懒得装断点调试工具,平时调试就用echo var_dump debug_print_backtrace 搞搞. 今天同事装了个xdebug,看着眼馋.于是想自己也装一个,由于平时用zend stu ...

  7. 把某个asp.net 控件 替换成 自定义的控件

    功能:可以把某个asp.net 控件 替换成 自定义的控件 pages 的 tagMapping 元素(ASP.NET 设置架构) 定义一个标记类型的集合,这些标记类型在编译时重新映射为其他标记类型. ...

  8. Pythonchallenge一起来闯关

    http://www.pythonchallenge.com/是一个在线的python过关游戏,一共有33关.玩这个游戏对熟悉python用法及相关库的使用都很有好处. 目前做到了第九关.python ...

  9. 【NEERC 2003】有向图破坏

    [题目描述] Alice和Bob正在玩如下的游戏.首先Alice画一个有N个顶点,M条边的有向图.然后Bob试着摧毁它.在一次操作中他可以找到图中的一个点,并且删除它所有的入边或所有的出边. Alic ...

  10. 不同浏览器对parseInt方法解析的不同

    parseInt方法的作用是将字符串转换为数字 当parseInt解析的时候只有0x和非0开头的数字,浏览器解析都一致,例如”0xA1”或 “9”. 只有当开头为0的时候才出现不同.IE,chrome ...