暴力TLE求助!!!开o2T得更多
查看原帖
暴力TLE求助!!!开o2T得更多
964645
pies_0x楼主2024/1/29 13:53
#include<bits/stdc++.h>
using namespace std;

#define N 1000000

char c[N];

bool alpha(char c)//判是不是字母
{
	if(((c>='a')&&(c<='z'))||((c>='A')&&(c<='Z')))return true;
	else return false;
}

bool cmp(char a,char b)//判相等
{
	if(a<='Z')a+='a'-'A';
	if(b<='Z')b+='a'-'A';
	return a==b;
}

int check(int l,int r)//从两边压到中间
{
	if(!alpha(c[l])||!alpha(c[r]))return false;//头尾非标点
	int flag=0,s=0;
	while(l<=r)
	{
		while(l<=r&&!alpha(c[l]))++l;
		while(r>=l&&!alpha(c[r]))--r;
		if(l>r)break;
		if(!cmp(c[l],c[r]))return 0;
		flag=1;
		if(l==r)s+=1;//计数
		else s+=2;
		++l,--r;
	}
	if(flag==1)return s;
	else return 0;
}

int main()
{
	char s[N];
	while(cin.getline(s,85))
	{
		strcat(c,s);
		strcat(c,"\n");
	}
	int l=0,r=0,m=0;
	for(int i=0;i<strlen(c)-1;++i)//遍历左右端点
	{
		for(int j=i+1;j<strlen(c);++j)
		{
			int n=check(i,j);
			if(n>m)l=i,r=j,m=n;
		}
	}
	printf("%d\n",m);
	for(int t=l;t<=r;++t)printf("%c",c[t]);
	return 0;
}
2024/1/29 13:53
加载中...