zoukankan      html  css  js  c++  java
  • USACO Section 1.3 : Calf Flac (calfflac)

    题意:据说假设你给无限仅仅母牛和无限台巨型便携式电脑(有很大的键盘),那么母牛们会制造出世上最优秀的回文。

    你的工作就是去寻找这些牛制造的奇观(最优秀的回文)。

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

    暴力 注意一些细节 输入字符中有回车啊之类的 wins下 输完按回车按Ctrl+z再按回车即可了

    ubuntu下是Ctrl+z

    代码:

    #include <algorithm>
    #include <iostream>
    #include <sstream>
    #include <cstdlib>
    #include <cstring>
    #include <iomanip>
    #include <cstdio>
    #include <string>
    #include <bitset>
    #include <vector>
    #include <queue>
    #include <stack>
    #include <cmath>
    #include <list>
    #include <map>
    #include <set>
    #define sss(a,b,c) scanf("%d%d%d",&a,&b,&c)
    #define mem1(a) memset(a,-1,sizeof(a))
    #define mem(a) memset(a,0,sizeof(a))
    #define ss(a,b) scanf("%d%d",&a,&b)
    #define s(a) scanf("%d",&a)
    #define INF 0x3f3f3f3f
    #define w(a) while(a)
    #define PI acos(-1.0)
    #define LL long long
    #define eps 10E-9
    #define N 100010<<1
    #define mod 1000000000+7
    using namespace std;
    void mys(int& res)
    {
        int flag=0;
        char ch;
        while(!(((ch=getchar())>='0'&&ch<='9')||ch=='-'))
            if(ch==EOF)  res=INF;
        if(ch=='-')  flag=1;
        else if(ch>='0'&&ch<='9')  res=ch-'0';
        while((ch=getchar())>='0'&&ch<='9')  res=res*10+ch-'0';
        res=flag?-res:res;
    }
    void myp(int a)
    {
        if(a>9)
            myp(a/10);
        putchar(a%10+'0');
    }
    /********************the end of template********************/
    struct node{
        int st, ed, lenth;
    }s;
    struct strtr{//副本
        int pos;
        char c;
    }strt[20001];
    char str[20001];
    bool can(char x, char y){
         if(x == y || (x - y == ('a' - 'A')) || (y - x == ('a' - 'A'))) return true;
         return false;
    }
    int main(){
            int j, k;
            char ch;
            int top = 0, len = 0;
            w((ch = getchar()) != EOF){
               str[len++] = ch;
               if(isalpha(ch)){
                    strt[top].c = ch;
                    strt[top++].pos = len-1;
               }
            }
            s.lenth = -1;
            for(int i = 0; i < top ; i ++){
                if(strt[i].c != strt[i+1].c){
                    for(j = i-1, k = i+1; j>=0 && k<top; j--, k++){
                        if(!can(strt[j].c,  strt[k].c )) break;
                    }
                }
                else{
                    for(j = i-1, k = i + 2; j>=0 && k<top; j--, k++){
                        if(!can(strt[j].c,  strt[k].c )) break;
                    }
                }
                if(s.lenth < k - j - 1){
                    s.st = strt[j+1].pos;
                    s.ed = strt[k-1].pos;
                    s.lenth = k - j - 1;
                }
            }
            cout<<s.lenth<<endl;
            for(int i=s.st; i<=s.ed; i++)
                cout<<str[i];
            cout<<endl;
        return 0;
    }


  • 相关阅读:
    PAT (Advanced Level) Practice 1071 Speech Patterns (25分)
    PAT (Advanced Level) Practice 1070 Mooncake (25分)
    PAT (Advanced Level) Practice 1069 The Black Hole of Numbers (20分)
    PAT (Advanced Level) Practice 1074 Reversing Linked List (25分)
    PAT (Advanced Level) Practice 1073 Scientific Notation (20分)
    第一次冲刺个人总结01
    构建之法阅读笔记01
    人月神话阅读笔记01
    四则运算2
    学习进度条(软件工程概论1-8周)
  • 原文地址:https://www.cnblogs.com/liguangsunls/p/6934600.html
Copyright © 2011-2022 走看看