• 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;
    }


  • 相关阅读:
    rowkey设计原则和方法
    ubuntu安装及使用
    sqoop数据迁移
    Hive 自定义UDF操作步骤
    hive之数据导入导出
    MySQL优化
    MongoDB、Redis、elasticSearch、hbase的对比
    数据库基本操作
    count(*) 和 count(1)和count(列名)区别
    BigDecimal的运算——加减乘除
  • 原文地址:https://www.cnblogs.com/liguangsunls/p/6934600.html
Copyright © 2020-2023  润新知