模板题,,,模板打错查了1h+QAQ

#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 1000003; int t1[N], t2[N], c[N], f[N][30];
void st(int *x, int *y, int *sa, int n, int m) {
int i;
for(i = 0; i < m; ++i) c[i] = 0;
for(i = 0; i < n; ++i) ++c[x[y[i]]];
for(i = 1; i < m; ++i) c[i] += c[i - 1];
for(i = n - 1; i >= 0; --i) sa[--c[x[y[i]]]] = y[i];
}
void mkhz(int *a, int *sa, int n, int m) {
int *t, *x = t1, *y = t2, i, j, p;
for(i = 0; i < n; ++i) x[i] = a[i], y[i] = i;
st(x, y, sa, n, m);
for(j = 1, p = 1; p < n; j <<= 1, m = p) {
for(p = 0, i = n - j; i < n; ++i) y[p++] = i;
for(i = 0; i < n; ++i) if (sa[i] >= j) y[p++] = sa[i] - j;
st(x, y, sa, n, m);
// for(i = 1; i < n; ++i) printf("%d ", sa[i]); puts("");
for(t = x, x = y, y = t, p = 1, x[sa[0]] = 0, p = 1, i = 1; i < n; ++i)
x[sa[i]] = y[sa[i]] == y[sa[i - 1]] && y[sa[i] + j] == y[sa[i - 1] + j] ? p - 1 : p++;
}
}
void mkh(int *r, int *sa, int *rank, int *h, int n) {
int k = 0, i, j;
for(i = 1; i <= n; ++i) rank[sa[i]] = i;
for(i = 1; i <= n; h[rank[i++]] = k)
for(k ? k-- : 0, j = sa[rank[i] - 1]; r[i + k] == r[j + k]; ++k);
}
void mkst(int *h, int n) {
int k = floor(log((double)n) / log(2.0));
for(int i = 1; i <= n; ++i)
f[i][0] = h[i];
for(int j = 1; j <= k; ++j)
for(int i = 1; i <= n; ++i) {
if (i + (1 << j) - 1 > n) break;
f[i][j] = min(f[i][j - 1], f[i + (1 << (j - 1))][j - 1]);
}
} char s[N];
int n, sa[N], a[N], rank[N], h[N];
int rmq(int l, int r) {
l = rank[l]; r = rank[r];
if (l > r) swap(l, r); ++l;
int k = floor(log((double)(r - l + 1)) / log(2.0));
return min(f[l][k], f[r - (1 << k) + 1][k]);
}
int main() {
while (scanf("%s", s + 1) != EOF) {
n = strlen(s + 1);
for(int i = 1; i <= n; ++i) a[i] = s[i];
a[n + 1] = 126;
for(int i = 1; i <= n; ++i)
a[n + 1 + i] = a[n + 1 - i];
mkhz(a, sa, n * 2 + 2, 130);
mkh(a, sa, rank, h, n * 2 + 1);
mkst(h, n * 2 + 1);
// for(int i = 1; i <= n * 2 + 1; ++i) printf("%d ", sa[i]); puts("");
// for(int i = 1; i <= n * 2 + 1; ++i) printf("%d ", rank[i]); puts("");
int ans = 0, x, h, t;
for(int i = 1; i <= n; ++i) {
// ans = max(ans, rmq(i, 2 * n + 2 - i) * 2 - 1);
// if (i != 1 && a[i - 1] == a[i]) ans = max(ans, rmq(i, 2 * n + 3 - i) * 2);
if ((x = rmq(i, 2 * n + 2 - i)) * 2 - 1 > ans)
ans = x * 2 - 1, h = i - x + 1, t = i + x - 1;
if (i != 1 && a[i - 1] == a[i] && (x = rmq(i, 2 * n + 3 - i)) * 2 > ans)
ans = x * 2, h = i - x , t = i + x - 1;
// printf("%d\n", ans);
}
for(int i = h; i <= t; ++i)
putchar(s[i]);
puts("");
// printf("%d\n", ans);
}
return 0;
}

第一次把调试信息放在代码里,会不会显得我很制杖呢?(水题都调了这么多)

【URAL 1297】Palindrome 最长回文子串的更多相关文章

  1. URAL 1297 Palindrome 最长回文子串

    POJ上的,ZOJ上的OJ的最长回文子串数据量太大,用后缀数组的方法非常吃力,所以只能挑个数据量小点的试下,真要做可能还是得用manacher.贴一下代码 两个小错,一个是没弄懂string类的sub ...

  2. URAL 1297 求最长回文字符串

    有种简单的方法,数组从左到右扫一遍,每次以当前的点为中心,只要左右相等就往左右走,这算出来的回文字符串是奇数长度的 还有偶数长度的回文字符串就是以当前扫到的点和它左边的点作为中心,然后往左右扫 这是O ...

  3. Ural 1297 Palindrome 【最长回文子串】

    最长回文子串 相关资料: 1.暴力法 2.动态规划 3.中心扩展 4.Manacher法 http://blog.csdn.net/ywhorizen/article/details/6629268 ...

  4. Ural 1297 Palindrome(后缀数组+最长回文子串)

    https://vjudge.net/problem/URAL-1297 题意: 求最长回文子串. 思路: 先将整个字符串反过来写在原字符串后面,中间需要用特殊字符隔开,那么只需要某两个后缀的最长公共 ...

  5. URAL 1297 最长回文子串(后缀数组)

    1297. Palindrome Time limit: 1.0 secondMemory limit: 64 MB The “U.S. Robots” HQ has just received a ...

  6. 后缀数组 - 求最长回文子串 + 模板题 --- ural 1297

    1297. Palindrome Time Limit: 1.0 secondMemory Limit: 16 MB The “U.S. Robots” HQ has just received a ...

  7. ural 1297 后缀数组 最长回文子串

    https://vjudge.net/problem/URAL-1297 题意: 给出一个字符串求最长回文子串 代码: //论文题,把字符串反过来复制一遍到后边,中间用一个没出现的字符隔开,然后就是枚 ...

  8. Palindrome - POJ 3974 (最长回文子串,Manacher模板)

    题意:就是求一个串的最长回文子串....输出长度. 直接上代码吧,没什么好分析的了.   代码如下: ================================================= ...

  9. POJ 3974 Palindrome(最长回文子串)

    题目链接:http://poj.org/problem?id=3974 题意:求一给定字符串最长回文子串的长度 思路:直接套模板manacher算法 code: #include <cstdio ...

随机推荐

  1. 《Python核心编程》部分代码习题实践(持续更新)

    第三章 3-10 交换异常处理方式 代码: #makeTextFile.py #!/usr/bin/env python 'makeTextFile.py' import os ls = os.lin ...

  2. SQL——查询考试

    一.            设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四个表的结构分别如表1-1的表(一)~表( ...

  3. MVC code first数据迁移 转

    coptto:http://www.cnblogs.com/miro/p/4164076.html 本篇是相对独立的一篇,主要讲解不丢失数据进行数据库结构升级. 前面我们讲解EF功能时(见第三篇文章) ...

  4. jmeter(一)基础介绍

    参考书籍:段念<软件性能测试与案例剖析>——第二版 推荐一本书<零成本实现web性能测试——基于Apache—jmeter>,主要内容是一些关于jmeter的实战使用,想学习的 ...

  5. 统计:P值 & α值

    来源:知乎:P值与α值的关系 一楼 P是"拒绝原假设时犯错误概率"又或者说是"如果你拒绝掉原假设实际上是在冤枉好人的概率". 不管怎么表达理解上都有点绕,所以你 ...

  6. Html5 Egret游戏开发 成语大挑战(七)游戏逻辑和数据处理

    本篇在前面的基础上,将进行逻辑的编码开发让游戏能够正式的玩起来,这里没有注重太多的体验细节,而是直接实现游戏的规则逻辑,将分成两个部分说明:数据处理和游戏逻辑. 初始化游戏数据 在前面的第五篇中,我们 ...

  7. 需要安全认证的远程EJB调用示例(Jboss EAP 6.2环境)

    一,Remote EJB 服务接口定义: package yjmyzz.ejb.server.helloworld; public interface HelloWorldService { publ ...

  8. Working Set缓存算法(转)

    为了加深对缓存算法的理解,特转此篇,又由于本文内容过多,故不做翻译,原文地址Working Set页面置换算法 In the purest form of paging, processes are ...

  9. SUBLIME TEXT 2中,光标移入移出括号的快捷键设置

    无赖右方向键→和End键都在键盘的另一边,每次输入完一个函数,光标在各种括号中间,有什么更好的方式将光标移出来呢?在Sublime Text 2中,我们可以自己设置快捷键: { "keys& ...

  10. 如何获取Flickr图片链接地址作为外链图片

    Flickr,雅虎旗下图片分享网站.为一家提供免费及付费数位照片储存.分享方案之线上服务,也提供网络社群服务的平台.其重要特点就是基于社会网络的人际关系的拓展与内容的组织.这个网站的功能之强大,已超出 ...