题目大意
有个国王有一面interesting 的镜子,这个镜子可以把一个字符串复制,但是是反的。比如说:
czy———镜子大法好———>czyyzc
这个国王用镜子对某个字符串搞了一些事情后,有了一个新的字符串。国王告诉你这个字符串,问你原字符串的长度
分析
这显然就是一个回文的判断。直接拆字符串,直到两种情况发生就输出长度。
- 字符串的长度成了奇数
- 字符串不回文
就是这样一个简单的模拟呀!
AC代码
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
string a;int lena;
bool pd(int end){
for(int i=0,j=end;i<=j;i++,j--)
if(a[i]!=a[j])return false;
return true;
}
int i,m,n,j,k,e;
int main(){
cin>>a;
lena=a.size();
while(1){
if(lena%2==1){
printf("%d",lena);
return 0;
}
if(pd(lena-1)==false){
cout<<lena;
return 0;
}
lena/=2;
}
return 0;
}
总结
本水题我居然WA+TLE了 好多 1遍!
好吧,其实我之前就是想着直接判断回文,而不是在一定范围内判断回文。AC代码和WA代码就这区别……
附:WA代码,点醒自己
#include<iostream>
#include<cstring>
using namespace std;
int i,m,n,j,k;
bool pd(string a){
for(int i=0,j=k-1;i<=k/2;i++,j--)
if(a[i]!=a[j])return false;
return true;
}
string a;
int main(){
cin>>a;
k=a.size();
if(k%2){
cout<<k;
return 0;
}
while(pd(a)){
for(i=k/2;i<k;i++)a[i]='\0';//想着删除字符 [笑cry]
k/=2;
}
cout<<k;
return 0;
}