1093: 小鹏的镜子
描述
题目描述:
小鹏有一面镜子,可以把接触的东西变成原来的两倍。但是因为是镜子嘛,只能对称变换。假如有一个为BA的珍珠项链,字母不一样代表的颜色不一样。现在小鹏用镜子将项链复制之后,项链变成了BAAB。如果再复制一遍的话,项链就会变成BAABBAAB。因为小鹏比较贪心,一直复制,最后竟然忘记原来的项链是什么样的了,接下来就请聪明的acmer编写程序,算出最开始项链的长度吧。
输入:
第一行N表示接下来有N(N<=10)个串;之后的N行,每行是一个不超过100个大写英文字母组成的串。
输出:
输出N行,每行是项链的初始长度
样例输入
2
ABBAABBA
AAAA
样例输出
2
1
第一次写这个题的时候,想的是用两个数组,第二个数组存放倒过来的后半段字符串,然后判断相等,这样写由于是逆向思维很容易正向和逆向之间产生思维错乱,导致思路非常不清晰,导致当时怎么做也做不出来,还是用从中间向两边找的老办法好理解。
#include<stdio.h>
#include<string.h>
char s[101];//存储输入的字符串
int slen(int l);//算出最开始链的长度
int main()
{
int n,i,l;
scanf("%d",&n);
getchar();
for(i=0;i<n;i++)
{
gets(s);
l=strlen(s);
printf("%d\n",slen(l));
}
}
int slen(int l)
{
int left,right,flag=0,i;
if(l%2==1)
return l;
else
{
left=l/2-1;
right=l/2;
for(i=0;i<l/2;i++)
{
if(s[left-i]!=s[right+i])
{
flag=1;
}
}
}
if(flag==0)//比较一次相同
{
return slen(l/2);
}
else//中途发现有不相等的情况
return l;
}