关于hdu 2059的完整解法与心得
2012-01-26 12:23
204 查看
首先我必须说一句。。。。这题对我来说实在是挺难的,,,做了好几个小时,不过值得庆幸的是最后在学长的帮助下终于做出来了。。。但是虽然难我却犯了无谓的错误浪费了许多宝贵的时间。。。首先最不应该忽略的就是清零。。。这个错误我已经犯N遍了。。。还有就是得多用些笔算神马的。。这样在调试的时候比较容易发现潜在的错误。。。 本题的主要思路:先考虑可能在任意一个加油站作为乌龟最后加油的地方。。。然后利用第推的思想卒个求和。。。。比如乌龟可能把第二个加油站作为最后加油的地点。。。由此我们需要依次求出把原点作为前一个加油站到第二个加油站的时间和把第一个加油站作为前一个加油站到第二加油站的时间。。。然后比较两种路径所用时间的多少求出把第二个作为最后加油站所用的最短时间。。。以此类推。。。以后各种情况均可由此法求得。。。。 #include"stdio.h" int l,n,t,c,vr,vt1,vt2; int i,j,p[105]; double timer,cmp,time[105],bestime; double maxt(double *time,int n) { int index=0,i; for(i=0;i<=n;i++) if(time[index]>time[i]) index=i; return time[index]; } void foretime(double *time,int *p) { p[0]=0; for(i=1;i<=n;i++) { for(j=0;j<i;j++) { if(p[i]-p[j]>c) cmp=time[j]+c*1.0/vt1+(p[i]-p[j]-c)*1.0/vt2+t; else cmp=time[j]+(p[i]-p[j])*1.0/vt1+t; if(j==0) time[i]=cmp-t; else if(time[i]>cmp) time[i]=cmp; } } } int main( ) { while(scanf("%d",&l)==1) { for(i=0;i<105;i++) time[i]=0; scanf("%d%d%d",&n,&c,&t); scanf("%d%d%d",&vr,&vt1,&vt2); for(i=1;i<=n;i++) scanf("%d",&p[i]); foretime(time,p); for(i=0;i<=n;i++) { if(i==0) { if(l-p[i]>c ) time[i]=time[i]+c*1.0/vt1+(l-p[i]-c)*1.0/vt2; else time[i]=time[i]+(l-p[i])*1.0/vt1; } else if(l-p[i]>c) time[i]=time[i]+c*1.0/vt1+(l-p[i]-c)*1.0/vt2+t; else time[i]=time[i]+(l-p[i])*1.0/vt1+t; } bestime=maxt(time,n); timer=l*1.0/vr; if(timer>bestime) printf("What a pity rabbit!\n"); else printf("Good job,rabbit!\n"); } return 0; }
相关文章推荐
- hdu 5289 关于线段树的解法 很有意思
- HDU 2544 关于最短路的三种解法
- 关于水题hdu-2008的一些心得体会。。
- 关于编码规范的一点心得体会
- Android端关于第三方环信的一些心得
- 开始搞实验的杂谈(五)-------主要关于第一个比较完整的boost支撑的client和单线程server
- 关于boost::function与boost::bind函数的使用心得
- 关于使用axios的一些心得技巧分享
- 关于安装win8系统的一些心得(详细)
- 关于存储过程的ADO调用的一些心得(输出参数,返回值)
- 「HDU - 2857」Mirror and Light(点关于直线的对称点)
- 关于Android的自动更新库(使用心得)
- 关于html学习的几点心得
- c语言进阶之路----关于函数指针的个人心得
- 关于封禁USB接口的心得
- 关于ActionContext.getContext()的用法心得
- 关于旅游网站 建站的布局心得
- 简简单单的心得 关于jsp 路径问题
- 关于java中BigDecimal的类型的用法心得
- HDU 2055 An easy problem(关于这道题中的一些小问题希望大家了解)