HDU 4662 MU Puzzle 多校最水的一题

本文介绍了解决HDU4662 MUPuzzle问题的方法,通过对字符串进行转换并统计特定字符的数量来判断是否能达成目标状态。通过一系列逻辑运算和条件判断,最终给出Yes或No的答案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题意就不说了,解法是把原串中所有的U都变成I统计I的个数,如果个数是奇数且不是1,就输出No 如果是偶数就除二,若变成了奇数就-3,再变成偶数就除二,直到小于2为止

若最终的结果是1就是Yes,否则就是No,要注意的是原串中有且仅有第一个字符是M

代码如下:

/*********
PRO: hdu 4662
TIT: MU Puzzle
TIM: 13/8/9
AUT: UKean
EMA: huyocan@163.com
*********/
#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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值