hdu5037(贪心)

题意:

有一只青蛙,在一条河(数轴)上跳,他要从0的位置跳到m;

现在这条河上已经有n个石头了,青蛙每次最多可以跳l;

现在你可以往河里任意放石头,使青蛙跳的次数最多;

每一组样例给出n,m,l.然后接下去给出已有n个石头的位置;

问最多跳几次:

思路:

贪心,dis表示前一跳的距离,我们要算接下去那一跳,和之前那一跳的和,如果小于等于l,则说明这两跳可以合并成一跳;

否则的话跳数加1;

如果距离>l+1;则我们可以放石头,让它必须跳两次;

如现在位置0,下一个石头要跳到15,青蛙一次跳10,那么我们在1放一个,他就必须两次才能到11,然后再跳4到15.这样上一跳的距离就成了余数,余下来的4;

AC代码:

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

const int N = 200005;
int p[N];

int main() {
	int t;
	int cas = 1;
	scanf("%d",&t);
	while(t--) {
		int n, m, l, res = 0;;
		scanf("%d%d%d",&n,&m,&l);
		for(int i = 1; i <= n; i++) {
			scanf("%d",&p[i]);
		}
		int dis = l;
		p[0] = 0;
		p[++n] = m;
		sort(p, p + n);
		printf("Case #%d: ",cas++);
		for(int i = 0; i < n; i++) {
			int mod = (p[i + 1] - p[i]) % (l + 1);
			int c = (p[i + 1] - p[i]) / (l + 1);

			if(dis + mod > l) {
				dis = mod;
				res += (1 + 2 * c);
			}
			else {
				dis += mod;
				res	+= 2 * c;
			}
		}
		printf("%d\n",res);
	}
	return 0;
}
时间: 2024-10-11 23:05:21

hdu5037(贪心)的相关文章

hdu5037 Frog (贪心)

http://acm.hdu.edu.cn/showproblem.php?pid=5037 网络赛 北京 比较难的题 Frog Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 99    Accepted Submission(s): 11 Problem Description Once upon a time, there is

2014北京网络预选赛1006(贪心)HDU5037

Frog Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 1357    Accepted Submission(s): 364 Problem Description Once upon a time, there is a little frog called Matt. One day, he came to a river.

hdu5037 Frog --- 贪心

有一只萌萌哒小青蛙要过河,过河路线可以看成一个数轴,起点为0,终点为m. 小青蛙不会游泳,只能跳到数轴上一些有树桩的点直到跳过河,小青蛙一次能跳的最大距离是L. 小青蛙想用尽量少的步数过河,而你想让他跳尽量多的次数. 现在你可以向数轴上一些位置添加树桩,使青蛙顺利过河,并达到你的目的.青蛙是以最佳策略过河的. 纠结的题意.. 首先分析一下青蛙的最佳策略,一定是每次跳的越远越好, 假设a<b,那么通过a能到达的点,b一定能到达,所以当有多个点可以选择时,一定跳到最远的那个. 既然青蛙每次尽量跳的远

【uva 1615】Highway(算法效率--贪心 区间选点问题)

题意:给定平面上N个点和一个值D,要求在x轴上选出尽量少的点,使得对于给定的每个店,都有一个选出的点离它的欧几里德距离不超过D. 解法:先把问题转换成模型,把对平面的点满足条件的点在x轴的直线上可得到一个个区间,这样就是选最小的点覆盖所有的区间的问题了.我之前的一篇博文有较详细的解释:关于贪心算法的经典问题(算法效率 or 动态规划).代码实现我先空着.挖坑~

【贪心+Treap】BZOJ1691-[Usaco2007 Dec]挑剔的美食家

[题目大意] 有n头奶牛m种牧草,每种牧草有它的价格和鲜嫩度.每头奶牛要求它的牧草的鲜嫩度要不低于一个值,价格也不低于一个值.每种牧草只会被一头牛选择.问最少要多少钱? [思路] 显然的贪心,把奶牛和牧草都按照鲜嫩度由大到小排序,对于每奶牛把鲜嫩度大于它的都扔进treap,然后找出后继. 不过注意后继的概念是大于它且最小的,然而我们这里是可以等于的,所以应该是找cow[i].fresh-1的后继,注意一下…… 1 #include<iostream> 2 #include<cstdio&

POJ1017 Packets(贪心算法训练)

Time Limit: 1000MS          Memory Limit: 10000K          Total Submissions: 51306          Accepted: 17391 Description A factory produces products packed in square packets of the same height h and of the sizes 1*1, 2*2, 3*3, 4*4, 5*5, 6*6. These pro

ZOJ 3946 Highway Project 贪心+最短路

题目链接: http://www.icpc.moe/onlinejudge/showProblem.do?problemCode=3946 题解: 用dijkstra跑单元最短路径,如果对于顶点v,存在一系列边(ui,v)使得dis[v]最小(dis[v]表示0到v的距离).这些边能且只能选一条,那么我们自然应该选cost最小的那个边了. 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #inc

CoderForce 140C-New Year Snowmen(贪心)

题目大意:有n个已知半径的雪球.堆一个雪人需要三个尺寸不同的雪球,问用这些雪球最多能堆多少个雪人? 题目分析:先统计一下每种尺寸的球的个数,从三种最多的种类中各取出一个堆成雪人,这样贪心能保证的到的数目最多. 代码如下: # include<iostream> # include<map> # include<vector> # include<cstdio> # include<queue> # include<algorithm>

计蒜客 跳跃游戏(贪心)

给定一个非负整数数组,假定你的初始位置为数组第一个下标.数组中的每个元素代表你在那个位置能够跳跃的最大长度. 请确认你是否能够跳跃到数组的最后一个下标. 例如: A = [2,3,1,1,4], return ture A = [3,2,1,0,4], return false. 格式: 第一行输入一个正整数n,接下来的一行,输入数组A[n].如果能跳到最后一个下标,输出"true",否则输出"false" 样例1 ????输入:???? ????????5 ???