超时。。。
查看原帖
超时。。。
1264600
Lazy_make_name楼主2024/3/16 09:49

代码有点长,请耐心看完

#include<iostream>
#include<string>
#include<cstring>
#include<cstdio>
using namespace std;
int a[50000];
void zhuan(string k,int i){
	if(k=="a")
		a[i]=1;
	if(k=="b")
		a[i]=2;
	if(k=="c")
		a[i]=3;
	if(k=="d")
		a[i]=4;
	if(k=="e")
		a[i]=5;
	if(k=="f")
		a[i]=6;
	if(k=="g")
		a[i]=7;
	if(k=="h")
		a[i]=8;
	if(k=="i")
		a[i]=9;
	if(k=="j")
		a[i]=10;
	if(k=="k")
		a[i]=11;
	if(k=="l")
		a[i]=12;
	if(k=="m")
		a[i]=13;
	if(k=="n")
		a[i]=14;
	if(k=="o")
		a[i]=15;
	if(k=="p")
		a[i]=16;
	if(k=="q")
		a[i]=17;
	if(k=="r")
		a[i]=18;
	if(k=="s")
		a[i]=19;
	if(k=="t")
		a[i]=20;
	if(k=="u")
		a[i]=21;
	if(k=="v")
		a[i]=22;
	if(k=="w")
		a[i]=23;
	if(k=="x")
		a[i]=24;
	if(k=="y")
		a[i]=25;
	if(k=="z")
		a[i]=26;
}
bool shi(string k,int q){
	int x=0;
	int b[26];
	memset(b,0,sizeof(b));
	for(int i=0;i<k.size();i++){//判断是否是回文数 
		if(k.substr(i,1)==k.substr(k.size()-i-1),1)
			x++;
		if(k.substr(i,1)=="0")
			return 0;
	}
	if(x==k.size()){//判断是否有重复 
		for(int i=0;i<=k.size();i++){
			if(b[a[q+i]]>2)
				return 0;
			else
				b[a[q+i]]++;
		}
		return 1;
	}
	return 0;
}
int main(){
	int ji=0,t;
	string n,k;
	char lin;
	cin>>n;
	ji=n.size()*2-1;
	for(int i=0;i<n.size();i++){
		k=n.substr(i,1);
		zhuan(k,i);
	}
	n+="00000000000000000000000000000000000000000000000000";
	for(int i=0;i<n.size()-52;i++)
		for(int j=3;j<=52;j++){
			k=n.substr(i,j);
			if(shi(k,i))
				ji++;
		}
	cout<<ji;
}
2024/3/16 09:49
加载中...