此题是找规律题,发现规律就不难了。
首先,可以肯定字符串中只能有一个‘M",而且必定在第一个。先处理 I相当于1,U相当于3.我们发现三个I相当于一个U,而U是由I变来的,把U还原成3个I,I的个数总是2^n个,而三个U相当于一个U,也就意味着在原来的变换中会多出6个I。
所以可以推测sum%6==2||sum%6==4,最后剩下2和4,都可以变。考虑MI是原来的字串,所以sum=1也算。
代码:
#include<stdio.h>
#include<string.h>
int main()
{
int t,len,sum=0;
char st[100005];
scanf("%d",&t);
loop: while(t--){
scanf("%s",st);
len=strlen(st);
if(st[0]!='M'){
puts("No");
continue;
}
sum=0;
for(int i=1;i<len;i++){
if(st[i]=='M'){
puts("No");
goto loop;
}
else if(st[i]=='I') sum++;
else sum+=3;
}
if(sum==1||sum%6==4||sum%6==2)
puts("Yes");
else puts("No");
}
return 0;
}