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; }