【題目描述】

据说如果你给无限只母牛和无限台巨型便携式电脑(有非常大的键盘),那么母牛们会制造出世上最棒的回文。你的工作就是去寻找这些牛制造的奇观(最棒的回文)。

在寻找回文时不用理睬那些标点符号、空格(但应该保留下来以便做为答案输出),只用考虑字母'A'-'Z'和'a'-'z'。要你寻找的最长的回文的文章是一个不超过20,000个字符的字符串。我们将保证最长的回文不会超过2,000个字符(在除去标点符号、空格之前)。

【格式】

INPUT FORMAT: (file calfflac.in)

输入文件不会超过20,000字符。这个文件可能一行或多行,但是每行都不超过80个字符(不包括最后的换行符)。

OUTPUT FORMAT: (file calfflac.out)

输出的第一行应该包括找到的最长的回文的长度。

下一行或几行应该包括这个回文的原文(没有除去标点符号、空格),把这个回文输出到一行或多行(如果回文中包括换行符)。

如果有多个回文长度都等于最大值,输出最前面出现的那一个。

【分析】

直接模擬的話數據量實在是太大了,肯定會超時。

我們需要還一個角度來想,從第i個位置出發,向兩邊推,這是根據回文串的定義來做,需要注意的是,也要注意i,i+1再往兩邊推的情況。

同時還有一個要注意的是,枚舉可以直接從當前的最優長度來枚舉,這樣速度會有很大的提升。

 #include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
const int maxl=+;
using namespace std;
//注意:這裏d用來記錄位置
char a[maxl],b[maxl];
int d[maxl];
char change(char t)
{
//將大寫轉換爲小寫
if (t<'a') return (char)(t+);
return t;
}
bool check(int from,int to);
int main()
{
char temp;
//文件操作
freopen("calfflac.in","r",stdin);
freopen("calfflac.out","w",stdout);
memset(a,,sizeof(a));//a用來保存原文
memset(b,,sizeof(b));//b用來對比回文串
int point_1=,point_2=;
//讀入+轉換
while (scanf("%c",&temp)!=EOF)
{
a[point_1]=temp;
if ((temp>='a' && temp<='z') || (temp>='A' && temp<='Z'))
{
b[point_2]=change(temp);
d[point_2]=point_1;//記住同時要記錄位置
point_2++;
}
point_1++;
} int ans=,from=,to=,i,j;
for (i=;i<point_2;i++)
{
for (j=ans/;j<=min(i,min(point_2-i,));j++)
{
if (check(i-j,i+j))
{
if (*j+>ans)
{
ans=*j+;
from=d[i-j];
to=d[i+j];
}
}
else break;
}
for (j=ans/;j<=min(i,min(point_2-i,));j++)
{
if (check(i-j,i+j+))
{
if (*j+>ans)
{
ans=*j+;
from=d[i-j];
to=d[i+j+];
}
}
else break;
}
}
//輸出原文
printf("%d\n",ans);
for (i=from;i<=to;i++)
printf("%c",a[i]);
return ;
}
bool check(int from,int to)
{
int i;
for (i=from;i<=((from+to)/)+;i++)
if (b[i]!=b[from+to-i]) return ;
return ;
}

【USACO 1.3.3】回文串的更多相关文章

  1. [LeetCode] Longest Palindrome 最长回文串

    Given a string which consists of lowercase or uppercase letters, find the length of the longest pali ...

  2. [LeetCode] Shortest Palindrome 最短回文串

    Given a string S, you are allowed to convert it to a palindrome by adding characters in front of it. ...

  3. [LeetCode] Palindrome Partitioning II 拆分回文串之二

    Given a string s, partition s such that every substring of the partition is a palindrome. Return the ...

  4. [LeetCode] Palindrome Partitioning 拆分回文串

    Given a string s, partition s such that every substring of the partition is a palindrome. Return all ...

  5. [LeetCode] Longest Palindromic Substring 最长回文串

    Given a string S, find the longest palindromic substring in S. You may assume that the maximum lengt ...

  6. bzoj 3676 回文串 manachar+hash

    考虑每个回文串,它一定是它中心字母的最长回文串两侧去掉同样数量的字符后的一个子串. 所以我们可以用manachar求出每一位的回文半径,放到哈希表里并标记出它的下一个子串. 最后拓扑排序递推就行了.. ...

  7. BZOJ 3676: [Apio2014]回文串

    3676: [Apio2014]回文串 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 2013  Solved: 863[Submit][Status ...

  8. SPOJ - PLSQUARE Palin Squar(hash+回文串)

    题意:给你一个n*n (n<=200)的字符串矩阵,问你每行每列都是回文串的最大的m*m的矩阵是多少 题解:首先答案不满足单调性,即m成立而m-1与m+1都却不一定成立,所以必须枚举答案确定现在 ...

  9. 删除部分字符使其变成回文串问题——最长公共子序列(LCS)问题

    先要搞明白:最长公共子串和最长公共子序列的区别.    最长公共子串(Longest Common Substirng):连续 最长公共子序列(Longest Common Subsequence,L ...

随机推荐

  1. MySQL 没有索引 锁全表

    <h3 class="title" style="box-sizing: inherit; margin: 8px 0px 15px; padding: 0px; ...

  2. Sublime Text 3 配置

    配置: { "font_face": "Source Code Pro", , "highlight_line": true, " ...

  3. AlgorithmsI Exercises: UnionFind

    Question1 Give the id[] array that results from the following sequence of 6 unionoperations on a set ...

  4. hdu-4638-Group(树状数组)

    题意 找到区间里有多少组连续数字串 分析: (转)思路:显然,我们要使得value最大,就要尽量将连续的ID分在一组,所以问题转化为求一个区间中连续ID区间的个数.我们从左往右扫描,依次考虑右端点为i ...

  5. 基于物联网操作系统HelloX的智慧家庭体系架构

    基于物联网操作系统HelloX的智慧家庭体系架构 智慧家庭是物联网的一个分支应用,是一个被广泛认同的巨大IT市场空间.目前市场上已经有很多针对智慧家庭的产品或解决方案,但与移动互联网不同,智慧家庭至今 ...

  6. 数学计数原理(Pólya):POJ 1286 Necklace of Beads

    Necklace of Beads Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 7763   Accepted: 3247 ...

  7. 数学(逆元):BZOJ 2186: [Sdoi2008]沙拉公主的困惑

    2186: [Sdoi2008]沙拉公主的困惑 Description 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M!互质的钞 ...

  8. 【26】Remove Duplicates from Sorted Array

    [26]Remove Duplicates from Sorted Array Given a sorted array, remove the duplicates in place such th ...

  9. 使用MockMvc编写spring boot的controller的测试用例

    springboot自带测试模块. 注解需要: @SpringApplicationConfiguration(classes = ComputeServiceApplication.class) 这 ...

  10. 10th day

    貌似有几天没写博客了额.... 现在学习MySQL数据库,难度并不是很大,只是需要记忆的知识点比较多,好多语法之类的,比较容易混淆,而且老师讲课的速度还是蛮快的,虽然部分同学觉得听起来有点吃力,不过我 ...