码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 4662 MU Puzzle:找规律

时间:2017-08-17 10:47:25      阅读:221      评论:0      收藏:0      [点我收藏+]

标签:...   一个   ++   ios   链接   UI   题解   end   blank   

题目链接: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 }

 

HDU 4662 MU Puzzle:找规律

标签:...   一个   ++   ios   链接   UI   题解   end   blank   

原文地址:http://www.cnblogs.com/Leohh/p/7377405.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!