题意:给你一个串MI,按照三种规则1:M后面的部分加倍 2:III->U 3:删去连续的两个UU。看看能否变为给定的串
解题关键:将所有的U转化为I,发现 t+k*6=2^i -> =2^i%6,找规律发现 t%6==2或t%6==4
#include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> #include<cmath> #include<iostream> using namespace std; typedef long long ll; int main(){ int t; cin>>t; string s; while(t--){ cin>>s; int num=0; int f1=0; for(int i=0;i<s.size();i++){ if(s[i]=='I') num++; if(s[i]=='U') num+=3; if(s[i]=='M') f1++; } if(f1!=1||s[0]!='M') {cout<<"No\n";continue;} if(num==1||num%6==2||num%6==4) cout<<"Yes\n"; else cout<<"No\n"; } return 0; }