1564: Strange Class
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 151 Solved: 68
[Submit][Status][Web Board]
Description
在Vivid的学校里,有一个奇怪的班级(SC).在SC里,这些学生的名字非常奇怪。他们的名字形式是这样的aaa…bbb…ccc…(a,b,c两两不相同。).例如,叫”abc”,”ddppqq”的学生是在SC里的,然而叫”aaa”,”ab”,”ddppqqq”的同学并不是在SC里的。
Vivid交了许多的朋友,他想知道他们之中哪些人是在SC里的。
Input
多组测试数据(大概10
组),每一个数据在一行中给出一个字符串S,代表Vivid一个朋友的名字。
请处理到文件末尾。
[参数约定]
1≤|S|≤10.
|S| 是指S的长度.
S 只包含小写字母
Output
对于每一个数据,如果Vivid的朋友是SC里的,那么输出YES,否则输出NO。
Sample Input
abc
bc
Sample Output
YES
NO
HINT
Source
/*
第一次并没有看懂题目,现在再看,看懂了。是SC班的条件为:名字有三个互不相同的字母,并且满足每个字母连续出现并且每个字母个数相同,比如(aabbcc,abc,aaabbbccc,…)
*/
AC_code:
#include <stdio.h>
#include <string.h>
char a[1005];
bool Res(int s,int e)
{
char p = a[s];
for(int i = s; i < e; i++)
{
if(a[i] != p)
return false;
}
return true;
}
bool Ans(char a[])
{
int lenth_a = strlen(a);
int b[30] = {0};
for(int i = 0; i < lenth_a; i++)
{
b[a[i]-'a']++;
}
int sum = 0,x = 0 ,flag = 1;
for(int i = 0; i < 26; i++)
{
if(b[i])
{
sum++;
if(flag)
x = b[i];
flag = 0;
}
if(sum > 3||(x && 3*x != lenth_a))
return false;
}
if(sum != 3)
return false;
else
{
if(Res(0,x)&&Res(x,2*x)&&Res(2*x,lenth_a))
return true;
else
return false;
}
}
int main()
{
while(~scanf("%s",a))
{
if(Ans(a))
printf("YES\n");
else
printf("NO\n");
memset(a,'\0',sizeof(a));
}
return 0;
}