题目大意:
一个做直线运动的物体已知初速度v0和v1,每分钟速度最大改变d,总共运动了t分钟,问至多运动了多少距离。(每个单位时间只能以同一种速度行驶)思路:
肯定是先尽可能加速再减速,我们可以想一个O(n)的贪心,从时间轴左右两端出发,然后每次在少的一端加上d,然后累加答案即可。 观察发现这其实就是两个直线求交点,因此可以O(1)过。1 #include2 #include 3 inline int getint() { 4 register char ch; 5 while(!isdigit(ch=getchar())); 6 register int x=ch^'0'; 7 while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0'); 8 return x; 9 }10 int main() {11 int v1=getint(),v2=getint(),t=getint(),d=getint();12 int ans=v1+v2;13 int l=1,r=t;14 while(l+1