HDU 5037 FROG 贪心 2014北京网络赛F

题目链接;点击打开链接

题意:有一条小河长为M的小河,可以看作一维轴,小河里存在N个石头,有一个每次能跳L米的小青蛙,随意添加石头保证青蛙能从头跳到尾的,问青蛙使用最优策略跳到对岸最多需要多少次。

思路:不妨假设青蛙每个石头都要经过一次,用step表示青蛙上一次跳的步长,每跳一次对目前点到下一点的距离和step的和与L做比较,如果小与,证明青蛙可以一次跳到这,更新step和青蛙位置,cnt保持不变,若大于,证明青蛙至少需要再跳一次,若lenth<=l,则直接跳,更新step=lenth,cnt++;若lenth>l,则让青蛙以l+1-step,step,的周期跳,易证可以保证解最优,然后相当于把石头向后平移x*(l+1)个单位。and so on。详情请看代码,非常明了~比赛的时候手残wa到哭!!!

cpp:

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
int data[200010],T,n,m,l;
void slove()
{
	sort(data,data+n+1);
	int step=l,now=0,cnt=0;
	for(int i=0;i<=n;i++){
		int lenth=data[i]-now;
		if(lenth==0) continue;
		if(lenth+step<=l){
			now=data[i];
			step=lenth+step;
		}
		else if(lenth<=l){
			now=data[i];
			step=lenth;
			cnt++;
		}
		else if(lenth>l){
			int tp=lenth%(l+1);
			cnt+=(lenth/(l+1))*2;
			if(tp+step<=l){
				step=tp+step;
				now=data[i];
			}
			else {
				step=tp;
				now=data[i];
				cnt++;
			}
		}
	}
	printf("%d\n",cnt);
}
int main()
{
	//freopen("data.in","r",stdin);
	int cas=0;
	scanf("%d",&T);
	while (T--){
		printf("Case #%d: ",++cas);
		scanf("%d%d%d",&n,&m,&l);
		for(int i=0;i<n;i++){
			scanf("%d",data+i);
		}
		data[n]=m;
		slove();
	}
	return 0;
}
时间: 2024-12-26 02:05:26

HDU 5037 FROG 贪心 2014北京网络赛F的相关文章

HDU 5033 Building(2014北京网络赛 单调栈+几何)

博客原文地址:http://blog.csdn.net/xuechelingxiao/article/details/39494433 Building 题目大意:有一排建筑物坐落在一条直线上,每个建筑物都有一定的高度,给出一个X坐标,高度为0,问X位置能看到的视角是多少度.如图: 图一: 图二: 图一为样例一,图二为样例三,红色部分为高楼,蓝色虚线为视角的最大范围. 解题思路: 由于有10w个点跟10w次询问,所以朴素的算法判断肯定会超时的.所以就需要用单调栈,维护相邻两建筑顶(xi,hi)的

[hdu 5032]2014北京网络赛Always Cook Mushroom 离散化+离线线段树/树状数组

Always Cook Mushroom Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 196    Accepted Submission(s): 54 Problem Description Matt has a company, Always Cook Mushroom (ACM), which produces high-q

hdu 5038 (2014北京网络赛G 排序水题)

题意:有n个数字,带入10000 - (100 - ai) ^ 2公式得到n个数,输出n个数中频率最大的数,如果有并列就按值从小到大都输出输出,如果频率相同的数字是全部的n个数,就输出Bad....题解:统计数字个数和频率,排序后输出. Sample Input36100 100 100 99 98 1016100 100 100 99 99 1016100 100 98 99 99 97 Sample OutputCase #1:10000Case #2:Bad MushroomCase #3

HDU 5037 FROG (贪心)

Problem Description Once upon a time, there is a little frog called Matt. One day, he came to a river. The river could be considered as an axis.Matt is standing on the left bank now (at position 0). He wants to cross the river, reach the right bank (

hdu 5037 Frog 贪心 dp

哎,注意细节啊,,,,,,,思维的严密性..... 11699193 2014-09-22 08:46:42 Accepted 5037 796MS 1864K 2204 B G++ czy Frog Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 454    Accepted Submission(s): 96 Problem

[2014 北京网络赛]

02 hdu 5033 Building 题目意思: 数轴上有n根柱子,每根柱子有个位置坐标和高度,有q个询问,询问从位置qi能看到的角度(保证左右至少有一个柱子) 解题思路: 单调栈维护一个凸性柱子序列. 离线处理所有的查询,排序,然后扫一遍qi,把柱子插进去,更新单调栈.注意查询位置也要更新栈. 代码: //#include<CSpreadSheet.h> #include<iostream> #include<cmath> #include<cstdio&g

(中等) Hiho 1232 Couple Trees(15年北京网络赛F题),主席树+树链剖分。

"Couple Trees" are two trees, a husband tree and a wife tree. They are named because they look like a couple leaning on each other. They share a same root, and their branches are intertwined. In China, many lovers go to the couple trees. Under t

Hiho 1232 北京网络赛 F Couple Trees

给两颗标号从1...n的树,保证标号小的点一定在上面.每次询问A树上的x点,和B树上的y点同时向上走,最近的相遇点和x,y到这个点的距离. 比赛的时候想用倍增LCA做,但写渣了....后来看到题解是主席树就写了一发 呆马: 1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 #include <cstring> 5 #include <cmath> 6 #inclu

hdu 4006 优先队列 2011大连赛区网络赛F **

签到题都要想一会 1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #include<cstring> 5 #include<cmath> 6 #include<queue> 7 #include<map> 8 using namespace std; 9 #define MOD 1000000007 10 const int INF=0x3f3