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\n",sum); 22 } 23 return 0; 24 }