您的位置:首页 > 其它

Luogu P2799 国王的魔镜

2017-01-18 12:31 288 查看

题目大意

有个国王有一面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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: