社区讨论

最后1个点TLE,求调

P1210[USACO1.3] 最长的回文 Calf Flac参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mhjdscaz
此快照首次捕获于
2025/11/04 00:55
4 个月前
此快照最后确认于
2025/11/04 00:55
4 个月前
查看原帖
//
CPP
#include <iostream>

using namespace std;

string purs;
const int N=3e4+10;
char orstr[N];
int pos[N];
int ans,orsi;
int pan(char c)
{
    if(c<='Z'&&c>='A') return 2;
    else if(c<='z'&&c>='a') return 1;
    else return 0;
}
bool is(int a,int b)
{
    for(int i=a;i<=b;i++)
    {
        if(purs[i]!=purs[a+b-i]) return 0;
    }
    return 1;
}


int main()
{
    string s1;
    while(getline(cin,s1))
    {
        for(int i=0;i<s1.size();i++)
        {
            orstr[orsi++]=s1[i];
        }
        orstr[orsi++]='\n';
    }
    //cout << orstr;
    for(int i=0;i<orsi;i++)
    {
        if(!pan(orstr[i])) continue;
        if(pan(orstr[i])==2)
        {
            purs+=(orstr[i]-'A'+'a');
            pos[purs.size()-1]=i;
        }else
        {
             purs+=orstr[i];
            pos[purs.size()-1]=i;
        }
                    
    }
    //cout << purs;
    int i1,j1;
    for(int i=0;i<purs.size();i++)
    {
        for(int j=purs.size()-1;j>=i;j--)
        {
            if(is(i,j)) 
            {
                if(j-i>ans) 
                {
                    ans=j-i;
                    i1=i;
                    j1=j;
                }
                break;
            }
        }
    }
    cout << ans+1 << endl;
    int i2=pos[i1],j2=pos[j1];
    
    for(int i=i2;i<=j2;i++) cout << orstr[i];

    return 0;
}
}

回复

1 条回复,欢迎继续交流。

正在加载回复...