博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 5037 Frog(2014年北京网络赛 F 贪心)
阅读量:5855 次
发布时间:2019-06-19

本文共 1963 字,大约阅读时间需要 6 分钟。

  开始就觉得有思路,结果越敲越麻烦。。。 

  题意很简单,就是说一个青蛙从0点跳到m点,最多可以跳l的长度,原有石头n个(都仅表示一个点)。但是可能跳不过去,所以你是上帝,可以随便在哪儿添加石头,你的策略是让青蛙跳过去的次数最多,但是你添加了石头后,青蛙会选择最少的次数跳过去,问青蛙跳的次数最多是多少。

 

  原有石头与现在的距离不大于l,就找最远的那个可以跳的石头跳过去。接下来就是主要解决现在的位置与接下来的一块石头的距离大于l的情况了。模拟:上帝开始放石头,要让青蛙一定是这次跳这块石头(在上次不能跳),并且跳最近的距离。则它前一个位置 +l+1 与现在的位置 +1的最大值就是放石头的位置。但是数据范围太大,纯模拟会超时,这时就要注意到每两次放石头后跳的距离会重复,最短的距离就是 l+1,但是这儿要特殊处理一下当某一次添加石头后,它就可以直接跳到后面原有石头上了(距离不大于l)。还有就是我的代码需要特判还没有跳出来在0的时候的情况,具体可以看代码。

 

代码写得很麻烦

 

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;#define eps 1E-8/*注意可能会有输出-0.000*/#define Sgn(x) (x<-eps? -1 :x
0.0 ? x+eps : x-eps)//浮点数转化#define zero(x) (((x)>0?(x):-(x))
>b)typedef long long ll;typedef unsigned long long ull;const int Inf=1<<28;const double Pi=acos(-1.0);const int Max=200010;int rock[Max];int n,m,l;int Solve(){ int manx=0,now=0,pre=0;//最大步数 现在位置 前一个位置 sort(rock,rock+n); rock[n++]=m;//添加最后一个石头 int ran,tmp,tmpp; for(int i=0;now
l)//相差大于步数 l { if(i&&rock[i-1]-now
now)//现在的位置最远可以跳那个原有的石头 { manx++; pre=now; now=rock[i-1]; } if(rock[i]-now>l)//现在位置与之后的第一个原有石头大于步数 l { ran=rock[i]-l-1;//如果运用上帝铺的石头跳到了这个位置后 可能再再跳一步或者两步就可以直接跳到原有石头 tmp=(ran-now)/(l+1);//注意上帝铺的石头跳两步一定最少跳过l+1的距离 if(tmp) { manx+=tmp*2; tmpp=now-pre; now+=tmp*(l+1); if(tmpp) pre=now-tmpp;//相差位置不变 else//特判开始 pre=now-l; } manx++;//现在一定可以在跳一次 if(now) { tmpp=now; now=max(now+1,pre+l+1);//上帝铺的石头使这一次可以跳到的最近距离 pre=tmpp; } else//特判开始 now=1; if(now+l>=rock[i]);//一步跳入与原有石头距离不大于步数 l,就可以跳到现在这个原有石头后者之后的原有石头 else//要再铺一个石头 { manx++; tmpp=now; now=max(now+1,pre+l+1); pre=tmpp; } } } if(rock[i]-now==l)//可能是上一个if遗留的 { pre=now; now+=l; manx++; } if(i==n-1&&rock[i]-now
now) { manx++; return manx; } } return manx;}int main(){ int t,coun=0; scanf("%d",&t); while(t--) { scanf("%d %d %d",&n,&m,&l); for(int i=0; i

 

转载于:https://www.cnblogs.com/zhuanzhuruyi/p/5863603.html

你可能感兴趣的文章
LVS+keepalived负载均衡
查看>>
UITableview中cell重用引起的内容重复的问题
查看>>
stm32 ADC使用 单通道 多通道
查看>>
Windows7操作系统安装教程(图文)
查看>>
IOS Core Animation Advanced Techniques的学习笔记(三)
查看>>
除了模拟手术教学,VR在医疗领域如何应用?
查看>>
HashCode
查看>>
盘点5款Ubuntu监控工具解决CPU暴增问题
查看>>
java 测试IP
查看>>
C#实现ActiveX控件开发与部署
查看>>
用CSS做导航菜单的4个理由
查看>>
NOIP2015 运输计划 二分答案+Tarjan LCA+树上差分
查看>>
构建之法读后感
查看>>
hdu题型分类
查看>>
基本信息项目目标文档
查看>>
DNN Web Platform 官方汉化版本 5.5
查看>>
移动开发Html 5前端性能优化指南
查看>>
UGUI 分页渐变居中效果
查看>>
silverlight style和template 使用之tip
查看>>
Eclipse配置python环境
查看>>