• 寻找回文数


    描述

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

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

    格式

    PROGRAM NAME: calfflac

    INPUT FORMAT: (file calfflac.in)

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

    OUTPUT FORMAT: (file calfflac.out)

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

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

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

    SAMPLE INPUT

    Confucius say: Madam, I'm Adam.
    

    SAMPLE OUTPUT

    11
    Madam, I'm Adam
    
    
    
    
    题解:
    暴搜!
    代码实现:
    /*
    ID:10239512
    PROG:calfflac
    LANG:C++
    */

    #include <iostream>
    #include<fstream>
    using namespace std;
    ifstream fin("calfflac.in");
    ofstream fout("calfflac.out");

    string a,b;
    int len,t[20001],ri=1,le=1,max1=1;

    void check(int l, int r){
    while(l>=1&&r<=len&&b[l]==b[r])
    {l--;r++;}
    if(r-l-1>max1)
    {
    max1 = r - l-1;
    le = t[l+1];
    ri = t[r-1];
    }
    }

    int main()
    {
    int i,j;
    while (!fin.eof())
    a+=fin.get();

    b=" ";i=-1;len=0;
    for(i=0;i<a.size();i++)
    if((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z'))
    {
    len++;
    if(a[i]>=97) b+=a[i]-32; //悲催的是因为这里我调了一个晚自
    else b+=a[i]; // 习。不明白b+与b[len]=有什么区别
    t[len]=i;
    }
    for(i=1;i<=len;i++)
    {
    check(i-1,i+1);check(i,i+1);
    }
    fout<<max1<<endl;
    for(i=le;i<=ri;i++)
    fout<<a[i];
    fout<<endl;

    return 0;

    }


  • 相关阅读:
    mysql详解9:触发器和事件
    mysql详解7:视图
    mysql详解6:字符串函数 日期函数 IF CASE
    mysql详解5:复杂查询
    [转]Kubernetes网络组件之Calico策略实践(BGP、RR、IPIP)
    Springcloud 学习笔记05-Mybatis-Plus
    Git学习笔记04--tortoisegit的clone、pull、commit操作、分支的新增、合并、删除
    Git学习笔记03--Git客户端(TortoiseGit)安装与基本使用
    Java 项目bug记录过程--Failed to configure a DataSource
    TiDB学习笔记02-场景案例综述
  • 原文地址:https://www.cnblogs.com/noip/p/2384209.html
Copyright © 2020-2023  润新知