题目链接 http://codeforces.com/problemset/problem/534/B
题意:一辆车子行驶,起始速度为v1 m/s,结束速度为v2 m/s, 行驶 t 秒 ,加速度最大为d 。
该车在1秒内是匀速的,求该车的最大行驶距离。
题目思路:利用贪心策略,找到该车在这秒的最大加速度,使得接下来时间内它仍能回到v2速度,那么就采取那个加速度。
特判d为0的情况
代码如下:
#include<bits/stdc++.h>
using namespace std;
int canput(int n1,int add,int n2,int t,int d){
n1+=add;
t--;
int cha = abs(n2-n1);
if((cha%d==0?cha/d:cha/d+1)<=t)return 1;
else return 0;
}
int main()
{
int n1,n2,t,d;
scanf("%d%d%d%d",&n1,&n2,&t,&d);
int ans = 0;
if(d==0){
ans = n1*t;
}else{
while(t--){
ans += n1;
int flag = -1;
for(int i=d;i>=-d;i--){
int temp = canput(n1,i,n2,t,d);
if(temp){
flag = i;
break;
}
}
n1+=flag;
}
}
printf("%d\n",ans);
}