Uva 1588 - Kickdown

本文解析了一道UVA在线评测平台上的题目,通过简单的暴力算法解决两个由1和2组成的字符串问题,旨在找到容纳这两个字符串所需的最短高度为3的容器长度。文中提供了完整的C++代码实现。

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

原题网址:


https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=830&page=show_problem&problem=4463


题意:

给出两个由1和2组成的字符串,问至少需要多长的高度为3的容器能装下


很久以前感觉好难,没思路,放在那了,今天拿出来一看,好水的暴力题,成功水掉......


注意:两个没有确定前后顺序,所以都要考虑一下


#include<cstdio>
#include<cstring>
#include<algorithm> 
using namespace std;
char a[105],b[105];
int lena,lenb;
bool judge(char x[],char y[],int id)
{
	int lenx=strlen(x),leny=strlen(y);
	for(int i=id;i<lenx&&(i-id)<leny;++i)
	{
		if(x[i]+y[i-id]-96>3)//判断是否大于3
		{
			return 0;
		}
	}
	return 1;
}
int slove()
{
	int ans=lena+lenb;
	for(int i=0;i<lena||i<lenb;++i)
	{
		if(i<lena&&judge(a,b,i))//假设b在前
		{
			ans=min(ans,max(lena-i,lenb)+i);//画画图就看明白了
		}
		if(i<lenb&&judge(b,a,i))//假设a在前
		{
			ans=min(ans,max(lenb-i,lena)+i);
		} 
	}
	return ans;
}
int main()
{
	while(gets(a)&&gets(b))
	{
		lena=strlen(a);lenb=strlen(b);
		printf("%d\n",slove());
	}
	return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值