hdu Problem-4004(二分)

本文介绍了一道经典的算法竞赛题目——铁蛙三项中的跳跃挑战。任务是在限定次数内跨越河流,利用最少的最大跳跃距离完成任务。文章提供了完整的AC源码,并详细解释了二分搜索与模拟验证的解题策略。

The Frog's Games

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others)
Total Submission(s): 7263    Accepted Submission(s): 3482


Problem Description
The annual Games in frogs' kingdom started again. The most famous game is the Ironfrog Triathlon. One test in the Ironfrog Triathlon is jumping. This project requires the frog athletes to jump over the river. The width of the river is L (1<= L <= 1000000000). There are n (0<= n <= 500000) stones lined up in a straight line from one side to the other side of the river. The frogs can only jump through the river, but they can land on the stones. If they fall into the river, they 
are out. The frogs was asked to jump at most m (1<= m <= n+1) times. Now the frogs want to know if they want to jump across the river, at least what ability should they have. (That is the frog's longest jump distance).
 

Input
The input contains several cases. The first line of each case contains three positive integer L, n, and m. 
Then n lines follow. Each stands for the distance from the starting banks to the nth stone, two stone appear in one place is impossible.
 

Output
For each case, output a integer standing for the frog's ability at least they should have.
 

Sample Input
6 1 2 2 25 3 3 11 2 18
 

Sample Output
4 11



//思路:题目的的意思是求,在m次内通过河可以选择的最短跳跃距离,用二分枚举0~L内的数

重点在如何判断选择的数是否合法,其实简单模拟一下就行了(详见代码judge函数)

//其中我TLEL了几次,分别是不能while(cin>>L>>n>>m) for(k=0;k<50;++k)(修改详见代码)

AC源码:

#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;

const int MAXN=500000+10;
int L,n,m,dis[MAXN];
bool judge(int mid,int m,int num)
{
	int sum=0,i=0;
	while(m--)
	{
		sum+=mid;
		while(sum>=dis[i])
		{
			++i;
			if(i==num)
				break;
		}
		i=i-1;
		sum=dis[i];
	}
	if(sum>=L)
		return true;
	else
		return false;
}

int main()
{
	while(scanf("%d %d %d",&L,&n,&m)!=EOF)
	{
		dis[0]=0;
		dis[1]=L;
		int i=2;
		while(n--)
			cin>>dis[i++];
		sort(dis,dis+i);
		int a=0,b=L;
		for(int k=0;k<20;++k)
		{
			int mid=a+(b-a)/2;
			if(judge(mid,m,i))
				b=mid;
			else
				a=mid;
		}
		printf("%d\n",b);
	}
	return 0;
}


代码转载自:https://pan.quark.cn/s/9cde95ebe57a 横道图,亦称为甘特图,是一种可视化的项目管理手段,用于呈现项目的进度安排和时间框架。 在信息技术领域,特别是在项目执行与软件开发范畴内,横道图被普遍采用来监控作业、配置资源以及保障项目能按时交付。 此类图表借助水平条带图示来标示各个任务的起止时间点,使项目成员与管理者可以明确掌握项目的整体发展状况。 周期表或可指代计算机科学中的“作业调度周期表”或“资源配置周期表”。 在计算机系统中,作业调度是一项核心功能,它规定了哪个进程或线程能够在中央处理器上执行以及执行的具体时长。 周期表有助于系统管理者洞察作业的执行频率和资源使用状况,进而提升系统的运作效能和响应能力。 不仅如此,周期表也可能意指数据处理或研究中的周期性文档,如在金融分析中按期更新的市场信息文档。 在压缩文件“横道图,周期表.zip”内含的“横道图,周期表.doc”文件,很可能是对某个项目或任务管理的详尽阐述,涵盖利用横道图来制定和展示项目的时间进程,以及可能牵涉的周期性作业调度或资源配置情形。 文件或许包含以下部分:1. **项目简介**:阐述项目的目标、范畴、预期成效及参与项目的团队成员。 2. **横道图详述**:具体列出了项目中的各项任务,每个任务的启动与终止时间,以及它们之间的关联性。 横道图通常涵盖关键节点,这些节点是项目中的重要事件,象征重要阶段的实现。 3. **任务配置**:明确了每个任务的责任归属,使项目成员明晰自己的职责和截止日期。 4. **进展更新**:若文件是动态维护的,可能会记录项目的实际进展与计划进展的对比,有助于识别延误并调整计划。 5. **周期表探讨**:深入说明了周期性作业的调度,如定期的会议、报告递交、...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值