回文词
来源:互联网 发布:java培训班都教些什么 编辑:程序博客网 时间:2024/04/30 00:25
1、回文词(words.pas/c/cpp)
【问题描述】 CR 喜欢研究回文词,有天他发现一篇文章,里面有很多回文数,这使他来 了兴趣。他决定找出所有长度在 n 个字节以上的回文数。在寻找回文时不用理睬 那些标点符号、空格(但应该保留下来以便作为
答案输出) ,只用考虑英文字母 'A'-'Z'‘和'a'-'z'。 要你寻找的回文的文章是一个不超过 5,000个字符的字符串。
【输入文件】(words.in) 第一行为要找的回文的长度 n。后面一行或几行为一个不超过 5,000 个字符 的字符串。 .
【输出文件】( words.out) 输出的最后一行为找到的长度大于等于 n 的回文词的个数。 同一个回文中心 只算一组回文,并且输出这组回文最长的回文。前面一行或几行应该包括所有长 度大予等于 n 的回文词的原文(没有除去标点符号、空格) ,把这些回文输出到 一行或多行(如果回文中 包括换行符)。 如果有多个回文长度大于等于 n,全部输出所有回文。按回文中心在原文中 的出现顺序依次输出。
【输入样例】
3
Confucius say: Madam,I'm Adam.
【输出样例】
Madam
Madam, I'm Adam
m Adam
3
【数据规模】 对于40%的数据: 在2000 个字符以内 对于100%的数据: 在5000 个字符以内
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int pd[50003],sum[50003];
struct data
{
int x,pos;
};data num[50003];
char s[50003];
int i,j,n,m,ans,len;
void shuchu(int start,int end)
{
for (int i=num[start].pos;i<=num[end].pos;i++)
printf("%c",s[i]);
printf("\n");
return;
}
int main()
{
freopen("words.in","r",stdin);
freopen("words.out","w",stdout);
scanf("%d\n",&n);
len=0;
while ((s[len]=getchar())&&(s[len]!=EOF))
len++;
for (i=0;i<len;i++)
if (s[i]>=65&&s[i]<=90||s[i]>=97&&s[i]<=122)
{
pd[i+1]=0; sum[i+1]=sum[i]; m++; num[m].pos=i;
if (s[i]>=65&&s[i]<=90)
num[m].x=s[i];
else
num[m].x=s[i]-32;
}
else
pd[i+1]=1,sum[i+1]=sum[i]+1;
for (i=1;i<=m;i++)
{
j=1;
while (i-j>0&&i+j<=m&&num[i-j].x==num[i+j].x)
j++;
if ((j-1)*2+1>=n)
{
shuchu(i-j+1,i+j-1); ans++;
}
j=1;
while (i-j+1>0&&i+j<=m&&num[i-j+1].x==num[i+j].x)
j++;
if ((j-1)*2>=n)
{
shuchu(i-j+2,i+j-1); ans++;
}
}
printf("%d\n",ans);
}
0 1
- 回文词
- 回文词
- 回文词
- 回文词
- 回文词
- 回文词
- 回文词
- 回文词
- 回文词
- 回文词
- 回文词
- 回文数和回文词
- 添字成回文词 POJ1159
- 【动态规划】 回文词
- UVa 401回文词
- palindrome (回文词)
- [IOI2000] 回文词
- 回文词_DP
- Android QQ空间说说回复功能简介
- Zabbix监控系统的搭建
- 从UCSC获得gtf文件
- 做迅雷种子
- hdu 2132 An easy problem
- 回文词
- hihocoder-1014 Trie树(Trie树)
- tabBar工具条框架 (适应各种APP风格,集成只需几行代码,没有耦合度)
- 回溯 八皇后问题(JAVA)
- 萌妹子Python入门指北(二)
- 陈老师搬书
- A, S, M模式
- HDU 1232 畅通工程 并查集
- dede头像调用的底层函数讲解