Codeforces Round #298 (Div. 2) B. Covered Path

时间:2021-09-15 11:53:22

题目大意:

一辆车,每秒内的速度恒定...第I秒到第I+1秒的速度变化不超过D。初始速度为V1,末速度为V2,经过时间t,问最远能走多远。

分析

开始的时候想麻烦了。讨论了各种情况。后来发现每个时刻的最大值都满足一定的约束关系。设此时为时刻i,上一次的速度为p,那么本次的速度应为max(p+d,v2+(t-i)*d),因为要保证最终一定能够返回到v2。这样以来便可以得到每个时刻的最大值,然后累加求和即可。

 #include<cstdio>
#include<iostream>
using namespace std;
int main()
{
int v1,v2,t,d;
int a[];
while(scanf("%d %d",&v1,&v2)!=EOF)
{
scanf("%d %d",&t,&d);
a[]=v1;
int k=,tem=v1;
for(int i=;i<=t;i++)
{
tem=min(tem+d,v2+(t-i)*d);
a[++k]=tem;
}
int sum=;
for(int i=;i<=k;i++)
sum+=a[i];
printf("%d\n",sum);
}
return ;
}