題意就不說了,解法是把原串中所有的U都變成I統計I的個數,如果個數是奇數且不是1,就輸出No 如果是偶數就除二,若變成了奇數就-3,再變成偶數就除二,直到小於2為止
若最終的結果是1就是Yes,否則就是No,要注意的是原串中有且僅有第一個字符是M
代碼如下:
/*********
PRO: hdu 4662
TIT: MU Puzzle
TIM: 13/8/9
AUT: UKean
EMA: huyocan@163.com
*********/
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
char str[1000006];
int inline read()
{
scanf("%s",str);
return 1;
}
void deal()
{
int Sum_I=0,Str_Len=strlen(str);
for(int i=1;i<Str_Len;i++)
{
if(str[i]=='I') Sum_I++;
else if(str[i]=='U') Sum_I+=3;
else {Sum_I=0; break;}
}
if((Sum_I&1&&Sum_I!=1)||str[0]!='M') Sum_I=0;
while(Sum_I>1)
if(Sum_I&1) Sum_I-=3;
else Sum_I/=2;
if(Sum_I==1)
printf("Yes\n");
else
printf("No\n");
}
int main()
{
int T;scanf("%d",&T );
while(T--)
{
read();
deal();
}
return 0;
}