Time Limit: 1 second

Memory Limit: 128 MB

【问题描述】

CR喜欢研究回文词,有天他发现一篇文章,里面有很多回文数,这使他来了兴趣。他决定找出所有长度在n个字节以上的回文数。

在寻找回文时不用理睬那些标点符号、空格(但应该保留下来以便作为答案输出),只用考虑英文字母’A’—’Z’和’a’—’z’。

要你寻找的回文的文章是一个不超过5,000个字符的字符串。

【输入格式】

第一行为要找的回文的长度n。后面一行或几行为一个不超过5,000个字符的字符串。

【输出格式】

输出的最后一行为找到的长度大于等于n的回文词的个数。同一个回文中心只算一组回文,并且输出这组回文最长的回文。 前面一行或几行应该包括所有长度大于等于n的回文词的原文(没有除去标点符号、空格),把这些回文输出到一行或多行(如果回文中包括换行符)。 如果有多个回文长度大于等于n,全部输出所有回文。按回文中心在原文中的出现顺序依次输出。

【数据规模】

对于40%的数据: 在2000个字符以内 对于l00%的数据: 在5000个字符以内

Sample Input1

3

Confucius say:Madam,I’m Adam.

Sample Output1

Madam

Madam,I’m Adam

m Adam

3

【题目链接】:http://noi.qz5z.com/viewtask.asp?id=u230

【题解】



直接枚举就可以了;(我一直以为O(N^2)的算法会超);

枚举回文词的中心;

注意有两种情况

ABCBA



ABCCBA

即有的回文没有回文中心;

枚举回文的长度j;

不断判断s[i-j]和s[i+j]是否相等即可;

这题文件要一直读到底(有多行的输入、换行也要读(最后的输出读入的换行符号也要输出..)

while (scanf(“%c”,key)!=EOF) s+=c;

把字母隔离出来(全都转成小写字母判断相同即可);



【完整代码】

#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <set>
#include <map>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <queue>
#include <vector>
#include <stack>
#include <string>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second typedef pair<int,int> pii;
typedef pair<LL,LL> pll; void rel(LL &r)
{
r = 0;
char t = getchar();
while (!isdigit(t) && t!='-') t = getchar();
LL sign = 1;
if (t == '-')sign = -1;
while (!isdigit(t)) t = getchar();
while (isdigit(t)) r = r * 10 + t - '0', t = getchar();
r = r*sign;
} void rei(int &r)
{
r = 0;
char t = getchar();
while (!isdigit(t)&&t!='-') t = getchar();
int sign = 1;
if (t == '-')sign = -1;
while (!isdigit(t)) t = getchar();
while (isdigit(t)) r = r * 10 + t - '0', t = getchar();
r = r*sign;
} const int MAXN = 5500;
const int dx[5] = {0,1,-1,0,0};
const int dy[5] = {0,0,0,-1,1};
const double pi = acos(-1.0); int n;
string s;
vector <int> a;
int lens; void pri(int l,int r)
{
rep1(i,a[l],a[r])
cout << s[i];
puts("");
} bool xd(char x,char y)
{
char tx = x,ty =y;
if ('A'<=x&&x<='Z')
tx='a'+x-'A';
if ('A'<=y&&y<='Z')
ty='a'+y-'A';
return tx==ty;
} int main()
{
//freopen("F:\\rush.txt","r",stdin);
cin>>n;
getchar();
s=" ";
char key;
while (scanf("%c",&key)!=EOF)
s+=key;
lens = s.size()-1;
rep1(i,1,lens)
if (isalpha(s[i]))
a.pb(i);
int len = a.size();
int ans = 0;
rep1(i,0,len-1)
{
int j = 0;
while (i-j>=0 && i+j<=len-1 && xd(s[a[i-j]],s[a[i+j]]))
j++;
if (((j-1)*2+1)>=n)
{
pri(i-j+1,i+j-1);
ans++;
}
if (i-1>=0 && xd(s[a[i-1]],s[a[i]]))
{
int j = 1;
while (i-j>=0 && i-1+j<=len-1 && xd(s[a[i-j]],s[a[i-1+j]]))
j++;
if (((j-1)*2)>=n)
{
pri(i-j+1,i+j-2);
ans++;
}
}
}
cout << ans << endl;
return 0;
}

【u230】回文词的更多相关文章

  1. CSU 1328: 近似回文词

    省赛的A题...现场都没什么人做...其实就一暴力水题......坑死了... 1328: 近似回文词 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 1 ...

  2. 字符串 - 近似回文词 --- csu 1328

    近似回文词 Problem's Link:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1328 analyse: 直接暴力枚举每一个终点,然后枚举 ...

  3. csuoj 1328: 近似回文词

    http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1328 1328: 近似回文词 Time Limit: 1 Sec  Memory Limit: 1 ...

  4. 401 Palindromes(回文词)

      Palindromes  A regular palindrome is a string of numbers or letters that is the same forward as ba ...

  5. Vijos1327回文词【动态规划】

    回文词 回文词是一种对称的字符串--也就是说,一个回文词,从左到右读和从右到左读得到的 结果是一样的.任意给定一个字符串,通过插入若干字符,都可以变成一个回文词.你的任务是写 一个程序,求出将给定字符 ...

  6. 回文词_KEY

    回文词 (palin.pas/c/cpp) [问题描述] 回文词是一种对称的字符串--也就是说,一个回文词,从左到右读和从右到左读得的结果是一样的.任意给定一个字符串,通过插入若干字符,都可以变成一个 ...

  7. 回文词 (Palindromes,Uva401)

    例题 3-3 回文词 (Palindromes,Uva401) 输入一个字符中,判断它是否为回文串以及镜像串.输入字符串保证不含数字0.所谓回文串,就是反转以后和原串相同,如abba和madam.所有 ...

  8. csu-1328 近似回文词 和 最长回文字符串

    原博文地址:http://blog.csdn.net/u012773338/article/details/39857997 最长回文子串 描述:输入一个字符串,求出其中最长的回文子串.子串的含义是: ...

  9. CSU 1328 近似回文词【最长回文字符串(三种方法)】

    输入一行文本,输出最长近似回文词连续子串.所谓近似回文词是指满足以下条件的字符串: 1. S以字母开头,字母结尾 2. a(S)和b(S)最多有2k个位置不同,其中a(S)是S删除所有非字母字符并且把 ...

随机推荐

  1. C_数组详解

    数组: 一 一维数组 1.1 一维数组的定义: 类型符 数组名[常量表达式]; int a[10]; 说明: 1.数组的命名规则遵循标识符命名规则. 2.定义时需要指定元素的个数.方括号里的常量表达式 ...

  2. AtomicInteger类

    今天写代码.尝试使用了AtomicInteger这个类,感觉使用起来非常爽,特别适用于高并发訪问.能保证i++,++id等系列操作的原子性. ++i和i++操作并非线程安全的.非常多人会用到synch ...

  3. D. Dreamoon and Sets(Codeforces Round #272)

    D. Dreamoon and Sets time limit per test 1 second memory limit per test 256 megabytes input standard ...

  4. npm install (让别人下载自己的包)

    好几天没更新了,再这里跟大家说声抱歉,今天来点干货. 发布一个包在npm上,可以供世界所有人使用,想一下,以前我们做项目,都是在npm install 别人的包,什么时候才能install我们自己的包 ...

  5. JavaScript--数据结构与算法之列表

    3.1 列表的抽象数据类型定义 列表:一组有序的数据.每个列表中的数据称为元素.在JavaScript中列表的元素可以是任意的数据类型.列表中保存的元素没有事先的限定,实际使用时的元素数量受到程序内存 ...

  6. NVM安装nodejs的方法

    安装nodejs方式有很多种. 第一种:官网下载  通过nodejs官网下载安装 ,但有个缺陷,不同版本的nodejs无法顺利的切换. 第二种: NVM安装  NVM可以帮助我们快速切换 node版本 ...

  7. Node.js安装+环境配置【Windows版】

    Node.js安装及环境配置之Windows篇  一.安装环境 1.本机系统:Windows 10 Pro(64位)2.Node.js:v6.9.2LTS(64位) 二.安装Node.js步骤 1.下 ...

  8. vue中v-for的用法以及参数的作用

    <template> <div> <div class="content clearfix" v-on:click="goorderingD ...

  9. 洛谷 P3669 [USACO17OPEN]Paired Up 牛牛配对

    P3669 [USACO17OPEN]Paired Up 牛牛配对 题目描述 Farmer John finds that his cows are each easier to milk when ...

  10. 【hdu 6000】Wash

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 因为每件衣服都是没有区别的. 只有洗衣机不同会影响洗衣时间. 那么我们把每台洗衣机洗衣的时间一开始都加入到队列中. 比如{2,3,6 ...