题目描述:有一天,小明拿到了一个字符串,他想知道这个字符串是否是“完美的”。一个字符串被认为是“完美的”,当且仅当它可以被分割成若干个字符串拼接而成,这些字符串的长度都相等且都大于1,并且每个字符串本身都是回文串。回文串是指字符串中心对称,从左向右读和从右向左读的内容是一样的。
如果字符串是完美的,请输出Yes,否则请输出No。
输入:从文件perfect.in 中读入数据。
本. 题. 的. 测. 试. 点. 包. 含. 有. 多. 组. 测. 试. 数. 组.
输入的第一行包含一个整数t , 表示测试数据组数。
接下来,对于每组测试数据:
输入的第一行包含一个整数n , 表示字符串的长度。
输入的第二行包含一个长度为n 的字符串(仅由小写字母组成)。
输出:输出到文件perfect.out 中。
对于每组测试数据输出Yes 或者No,以换行结尾。
样例输入:
样例输入1 3 6 aabbcc 5 abcde 3 bcd 样例输入2 2 10 abcbadefed 10 aaaaaaaaaa
样例输出:
样例输出1 Yes No No 样例输出2 Yes Yes
提示:需要文件操作!!!
代码如下:
#include<bits/stdc++.h>//完美字符串(perfect)
using namespace std;
int t,tmp,tot,c,sum;
char a[100005];
char b;
int cnt;
int len;
bool k(int x)
{
for(int i=1;i<=len;i+=x)
{
int h=i,t=i+x-1;
b=a[i];
while(h<t)
{
if(a[h]!=a[t])
{
tot=1;
return false;
}
h++;
t--;
}
}
return true;
}
void solve()
{
for(int j=2;j<=len;j++)
{
tot=0;
if(len%j==0)
{
if(k(j))
{
printf("Yes\n");
return;
}
}
}
printf("No\n");
}
int main()
{
freopen("perfect.in","r",stdin);
freopen("perfect.out","w",stdout);
scanf("%d",&c);
while(c--)
{
scanf("%d",&len);
scanf("%s",a+1);
solve();
}
}
有问题欢迎在评论区提出!