[ZHOJ1954]lyd的旅行

题目大意:
  一个做直线运动的物体已知初速度v0和v1,每分钟速度最大改变d,总共运动了t分钟,问至多运动了多少距离。(每个单位时间只能以同一种速度行驶)

思路:
  肯定是先尽可能加速再减速,我们可以想一个O(n)的贪心,从时间轴左右两端出发,然后每次在少的一端加上d,然后累加答案即可。
  观察发现这其实就是两个直线求交点,因此可以O(1)过。

 #include<cstdio>
#include<cctype>
inline int getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int x=ch^'';
while(isdigit(ch=getchar())) x=(((x<<)+x)<<)+(ch^'');
return x;
}
int main() {
int v1=getint(),v2=getint(),t=getint(),d=getint();
int ans=v1+v2;
int l=,r=t;
while(l+<r) {
if(v1<v2) {
ans+=v1+=d;
l++;
} else {
ans+=v2+=d;
r--;
}
}
printf("%d\n",ans);
return ;
}
上一篇:Educational Codeforces Round 26 F. Prefix Sums 二分,组合数


下一篇:laravel 查询构建器(连贯操作)