思路:将所有的字符都变成I,判断I的个数是否是2的幂。设I的个数为a,U的个数为b则有
a+3b+6x=2^K是否有解,也就是a+3b不能是3的倍数。
代码如下:
1 #include<stdio.h> 2 #include<cstring> 3 char str[1000001]; 4 int main(){ 5 int i,t,len,num,sum; 6 scanf("%d",&t); 7 while(t--){ 8 scanf("%s",&str); 9 if(strcmp(str,"MI")==0){ 10 puts("Yes"); 11 continue; 12 } 13 len=strlen(str);num=0;sum=0; 14 for(i=0;i<len;i++){ 15 if(str[i]=='I') sum++; 16 else if(str[i]=='U') sum+=3; 17 else num++; 18 } 19 if(num>1||str[0]!='M'||(sum&1)||sum%3==0) 20 puts("No"); 21 else puts("Yes"); 22 } 23 return 0; 24 }