题目描述
小鹏有一面镜子,可以把接触的东西变成原来的两倍。但是因为是镜子嘛,只能对称变换。假如有一个为BA的珍珠项链,字母不一样代表的颜色不一样。现在小鹏用镜子将项链复制之后,项链变成了BAAB。如果再复制一遍的话,项链就会变成BAABBAAB。因为小鹏比较贪心,一直复制,最后竟然忘记原来的项链是什么样的了,接下来就请聪明的acmer编写程序,算出最开始项链的长度吧。
输入描述
第一行N表示接下来有N(N<=10)个串;之后的N行,每行是一个不超过100个大写英文字母组成的串。
输出描述
输出N行,每行是项链的初始长度
样例输入
2
ABBAABBA
AAAA
样例输出
2
1
示例代码:
#include<iostream>
using namespace std;
int main(){
int N;//N个串
int flag;
int str_down;
string str;
cin>>N;
while(N--){
cin>>str;
str_down=str.length()-1;
flag=1;
while(flag){//检查项链的初始长度
if((str_down+1)%2==1)//长度为单数,肯定不满足对称变换
break;
for(int j=0,k=str_down;j<k;j++,k--){//判断是否满足对称变换
if(str[j]!=str[k]) flag=0;
if(!flag) break;
}
if(flag)//如果满足,则长度减半
str_down=str_down/2;
}
cout<<str_down+1;
if(N!=0) cout<<endl;
}
return 0;
}
928

被折叠的 条评论
为什么被折叠?



