P1870公交车题解
szh_AK_all · · 题解
是这是一道比较好的题目(俺只是一个蒟蒻),建议大家先理解题目,摸清公式,不然根本下不了笔呀!
根据某加速度公式,在这里,我们用
Code
#include<iostream>
#include<iomanip>
#include<cmath>
#include<cstdio>
using namespace std;
double t,v;
double maxn=0.0;
int main()
{
double a,n,d;
cin>>n>>a>>d;
for(int i=1;i<=n;i++)
{
cin>>t>>v;
double ans=v*v*1.0/(2*a);//ans是匀加速时可行的最大路程
if(ans>=d)t+=sqrt(2*1.0*d/a);//第一种情况:总路程不大于ans 那么时间可以根据上述公式得出
else //第二种情况:总路程大于ans,也就是行驶过程中既要匀加速,又要匀速行驶
t+=(sqrt(2*ans/a)+(d-ans)/v);//首先,根据公式得出匀加速时行驶的时间;其次,得出匀速行驶时的时间
if(t>=maxn)//因为任何一辆公交都不能超过另一辆,所以用maxn来解决
maxn=t;
else
t=maxn;
t=floor(t*10000*1.0)/10000;//不要忘了精度问题
printf("%0.4lf\n",t); //要注意,这里用setprecision(4)好像过不了。呜呜~~
}
return 0;//终于结束了
}