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

题目大意:

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

分析

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

 1 #include<cstdio>
 2 #include<iostream>
 3 using namespace std;
 4 int main()
 5 {
 6     int v1,v2,t,d;
 7     int a[10000];
 8     while(scanf("%d %d",&v1,&v2)!=EOF)
 9     {
10         scanf("%d %d",&t,&d);
11         a[0]=v1;
12         int k=0,tem=v1;
13         for(int i=2;i<=t;i++)
14         {
15             tem=min(tem+d,v2+(t-i)*d);
16             a[++k]=tem;
17         }
18         int sum=0;
19         for(int i=0;i<=k;i++)
20             sum+=a[i];
21         printf("%d
",sum);
22     }
23     return 0;
24 }
原文地址:https://www.cnblogs.com/tsw123/p/4428981.html