cf 534B. Covered Path
http://codeforces.com/problemset/problem/534/B
题意是说一辆车,每秒内的速度恒定...第I秒到第I+1秒的速度变化不超过D。初始速度为V1,末速度为V2,经过时间t,问最远能走多远。
策略就是尽可能加速...加到某个时间,如果在这个时间不开始减速就回不到V2了。
从后往前预处理下每秒钟能达到的最大速度(如果超过这个速度,将不能减回到V2)
1
2 /* ***********************************************
3 Author :111qqz
4 Created Time :2016年02月22日 星期一 23时49分32秒
5 File Name :code/cf/problem/534B.cpp
6 ************************************************ */
7
8 #include <iostream>
9 #include <cmath>
10 #include <cstring>
11 #include <algorithm>
12
13 using namespace std;
14 const int N=1E2+5;
15 const int inf=8E9;
16 int a[N],m[N];
17 int v1,v2,t,d,tmp,p,ans,n;
18
19
20 int main()
21 {
22 cin>>v1>>v2>>t>>d;
23 p = inf;
24 memset(a,0,sizeof(a));
25 a[1]= v1;
26 tmp = v2;
27 m[t]= v2;
28 for ( int i = t-1 ; i >= 1; i--)
29 {
30 tmp = tmp+d;
31 m[i] = tmp;
32 }
33 for ( int i =2 ;i <= t; i++ )
34 {
35 if (a[i-1]+d<=m[i])
36 {
37 a[i] = a[i-1] + d;
38 }
39 else
40 {
41 a[i] = m[i];
42 p = i;
43 break;
44 }
45 }
46 ans = 0;
47 for ( int i = p ; i <= t; i++ )
48 a[i] = m[i];
49 for ( int i = 1; i <= t ; i++ )
50 {
51 if (i<p)
52 ans = ans + a[i];
53 else ans = ans + m[i];
54 }
55 // for ( int i = 1; i <= t ; i++)
56 // cout<<"a[i]:"<<a[i]<<endl;
57 cout<<ans<<endl;
58
59 return 0;
60 }
61