这是一道贪心题,思路就是在这t分钟内,使得每一分钟的速度尽量的大,而且相邻的两分钟速度之间的差不小于d。要满足这个条件,在开始的第二分钟和倒数第二分钟速度最大分别为第一分钟加上d和最后一份总加上d,然后在吧这两个看做第一分钟和倒数第一分钟,按上面的思路走就行了,直到他们达到t/2。这只是一个大致思路,首先还要判断刚开始的第一分钟和倒数第一分钟这两分钟的差值是否大于d,若大于d就要先使它们之间的差值小于d才能开始两边都开始加上d。还要判断t是奇数还是偶数。
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int main() {
int v1,v2,t,d,ans=0;
cin>>v1>>v2>>t>>d;
t-=2;
ans+=v1+v2;
if(abs(v1-v2)>d &&t) {
if(v1<v2) {
while(abs(v1-v2)>d && t) {
v1+=d;
ans+=v1;
t--;
}
}
else {
while(abs(v1-v2)>d && t) {
v2+=d;
ans+=v2;
t--;
}
}
}
while(t && t%2==0) {
v1+=d;
v2+=d;
ans+=v1+v2;
t-=2;
}
while(t && t%2) {
if(t==1) {
if(v1<v2) ans+=v1+d;
else ans+=v2+d;
t--;
}
else {
v1+=d;
v2+=d;
ans+=v1+v2;
t-=2;
}
}
cout<<ans<<endl;
return 0;
}