AtCoder Beginner Contest 076 D
来源:互联网 发布:淘宝美工在哪里找素材 编辑:程序博客网 时间:2024/06/06 08:49
1匀加速阶段:inc=min{vi-cur,(lim+t[i]-cur)/2,t[i]};
2匀减速阶段:dec=max{0,cur+inc-lim};
3匀速阶段:kep=t[i]-inc-dec。
// main.cpp// D - AtCoder Express//// Created by wenhan on 2017/10/28.// Copyright © 2017年 wenhan. All rights reserved.//#include <cstdio>#include <algorithm>using namespace std;double t[105],v[105];int main(){ int n; scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%lf",&t[i]); for(int i=1;i<=n;i++) scanf("%lf",&v[i]); double cur=0,ans=0;//cur为上一段速度,ans为路程 for(int i=1;i<=n;i++){ double a=0,b=0,c=0;//加速,减速,匀速(时间) double lim=0x3f3f3f;//下一段的速度 double tmp=0; for(int j=i+1;j<=n+1;j++){ lim=min(lim, v[j]+tmp);//这个式子写的很有味道,主要是取i+1可以取得的最大速度,v[j]+tmp tmp+=t[j];//就是在跟新所能取到的速度,因为有可能所要的速度达不到最大,所以这里写的巧 } a=min(min(t[i], v[i]-cur), (-cur+t[i]+lim)*0.5);//一直加速,先加速后匀速,先加速后减速 b=max(double(0),cur+a-lim);//不减速,有减速 c=t[i]-a-b;//匀速 ans+=0.5*(cur*2+a)*a;//计算加速 ans+=(cur+a)*c;//计算匀速 ans+=0.5*((cur+a)*2-b)*b;//计算减速 cur+=a;//跟新上一段的速度 cur-=b; } printf("%lf\n",ans); return 0;}
阅读全文
0 0
- AtCoder Beginner Contest 076 D
- AtCoder Beginner Contest 061 D
- AtCoder Beginner Contest 066 D
- AtCoder Beginner Contest 067 D
- AtCoder Beginner Contest 067 D
- AtCoder Beginner Contest 068 D
- AtCoder Beginner Contest 069 D
- AtCoder Beginner Contest 070-D
- AtCoder Beginner Contest 070 D
- AtCoder Beginner Contest 071 D
- AtCoder Beginner Contest 075 D
- AtCoder Beginner Contest 081 D
- AtCoder Beginner Contest 081 D
- AtCoder AtCoder Beginner Contest 063 D
- AtCoder Beginner Contest 058 D井井井 / ###【“贡献”】
- [AtCoder Beginner Contest 077]D-Small Multiple
- AtCoder Beginner Contest 055
- AtCoder Beginner Contest 052
- es6->数据结构
- 数据结构第九周项目(二)——二叉树遍历的递归算法
- 第八周 【项目1
- 谈谈spring中的拦截器interceptor
- webService简单实例
- AtCoder Beginner Contest 076 D
- 第四课:jsonp抓取数据
- Linux下Solr的安装和配置
- 第七周项目4
- 测试小白进阶学习网站汇总
- Nginx.conf配置文件中文解释版(1.11.1)
- http-flv 直播
- error: Installed (but unpackaged) file(s) found:
- android 权限控制2