设为首页 加入收藏

TOP

HDU 4662 MU Puzzle (水题)
2014-11-23 20:00:44 来源: 作者: 【 】 浏览:8
Tags:HDU 4662 Puzzle 水题

题意:给定字符串,下面定义几个操作:

1)将Mx变成Mxx,例如MII可以变为MIIII

2)将III替换成U


3)去掉连续两个U,例如MIUU可以变成MI

现在问你能不能将MI转换成给定字符串。

思路:注意到以下几个性质。第一,MI怎么变换M永远只能在第一位。第二,因为变换时只能在I和U之间变换,因此,除了第一个是M以外,后面如果有字符串不是U、I以内的话永远不可能变换得到。第三,U可以看成是3个I,无论是I先变换成U再操作还是转化成一定数量的I,最后再准换成一定数量的U即可,因此将所有的字母用I作为一般等价物进行交换即可。

最后问题就转化成这样,一开始有数字1,每次进行*2或者-6两种操作,问你能不能变换成数字K(K就是题目中的3*U的数量+I的数量)

用数学推导的方法是可行的的,不过既然数量只有10^6,只需要用一次BFS打表即可。




 #include   
#include   
#define MAXN 1000010   
using namespace std;  
bool hash[MAXN*3];  
char str[MAXN];  
int queue[MAXN];  
int T;  
void init()  
{  
    memset(hash,0,sizeof(hash));  
    hash[1]=1;  
    int front=0,rear=0;  
    queue[rear++]=1;  
    while(front0 && !hash[top-6]) {hash[top-6]=1; queue[rear++]=top-6;}  
    }  
}  
int main()  
{  
    init();  
    scanf("%d",&T);  
    while(T--)  
    {  
        scanf("%s",str);  
        bool flag=1;  
        int len=strlen(str),sum=0;  
        if(str[0]!='M') flag=0;  
        if(flag)  
        for(int i=1;i 
 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇poj-2186-Popular Cows-缩点 下一篇HDU3853:LOOPS(概率DP)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Python爬虫教程(从 (2025-12-26 16:49:14)
·【全269集】B站最详 (2025-12-26 16:49:11)
·Python爬虫详解:原 (2025-12-26 16:49:09)
·Spring Boot Java: (2025-12-26 16:20:19)
·Spring BootでHello (2025-12-26 16:20:15)