• HDU 4662 MU Puzzle:找规律


    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4662

    题意:

      初始字符串为"MI"。

      有三个操作:

        (1)将'M'之后的所有字符翻倍。For example: MIU to MIUIU.

        (2)将'III'变为一个'U'。For example: MUIIIU to MUUU.

        (3)删除'UU'。For example: MUUU to MU

      给你一个字符串s,问你是否能将初始字符串"MI"通过一系列操作变为s。

    题解:

      (1)因为'III'='U',所以令'I'=1,'U'=3.(操作2)

      (2)假设不进行操作3的话,将所有的'U'还原成'III','I'的个数为2的幂次方,也就是所有'U','I'之和为2^n。(操作1)

      (3)加上操作3,每删除一次'UU','U','I'之和减去6,所以sum = 2^n - k*6。(操作3)

      那么。。。打个表试试吧 (〃'▽'〃)

      1,2,4,8,10,14,16,20,26,32,34,40,46,52,58,64...

      哇有规律哦!

      sum为不能被3整除的偶数,或者1。

      所以读入的时候统计一下'U','I'之和,判断一下就好啦。

    AC Code:

     1 #include <iostream>
     2 #include <stdio.h>
     3 #include <string.h>
     4 
     5 using namespace std;
     6 
     7 int cases;
     8 string s;
     9 
    10 int main()
    11 {
    12     cin>>cases;
    13     while(cases--)
    14     {
    15         cin>>s;
    16         bool flag=true;
    17         int sum=0;
    18         if(s[0]!='M') flag=false;
    19         for(int i=1;i<s.size() && flag;i++)
    20         {
    21             if(s[i]=='I') sum++;
    22             else if(s[i]=='U') sum+=3;
    23             else flag=false;
    24         }
    25         if((sum&1) || sum%3==0) flag=false;
    26         if(flag || s=="MI") cout<<"Yes"<<endl;
    27         else cout<<"No"<<endl;
    28     }
    29 }
  • 相关阅读:
    python
    python
    python
    python
    python 序列化
    字典
    异常处理
    类的成员,类的特殊方法
    HTMLEditor类常用方法说明
    HTMLEditor类常用属性说明
  • 原文地址:https://www.cnblogs.com/Leohh/p/7377405.html
Copyright © 2020-2023  润新知