題意就不說了,解法是把原串中所有的U都變成I統計I的個數,如果個數是奇數且不是1,就輸出No 如果是偶數就除二,若變成了奇數就-3,再變成偶數就除二,直到小於2為止
若最終的結果是1就是Yes,否則就是No,要注意的是原串中有且僅有第一個字符是M
代碼如下:
/********* PRO: hdu 4662 TIT: MU Puzzle TIM: 13/8/9 AUT: UKean EMA: [email protected] *********/ #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; }