Codeforces Round #436 (Div. 2) C. Bus
http://codeforces.com/contest/864/problem/C
题意:
坐标轴上有x = 0和 x = a两点,汽车从0到a之后掉头返回,从a到0之后又掉头驶向a。。。从0到a或者从a到0叫做一次旅行。汽车的油箱的容量为b,行驶1单位长度消耗的油量为1单位,在x = f处有一个加油站,可以把油加满。
现在,汽车位于x = 0处,将要进行k次旅行,开始汽车的油箱是满的,问至少要加多少次油才能走完全程,或者不可能时输出“-1”。
思路:
可以把汽车的旅行看成是一直向前的,那么旅途中就有k个加油站,我们首先保证能够走到第一个加油站,之后根据贪心原则,走不到下一个加油站就在当前加油站加油,加了油之后都走不到的话,那就永远没有办法走到了。。。
最后再判断一下是否可以走完最后一个加油站到终点的路程即可。
代码:
1 #include <stdio.h> 2 3 int main() 4 { 5 long long a,b,f,k; 6 7 scanf("%lld%lld%lld%lld",&a,&b,&f,&k); 8 9 long long now = b; 10 11 long long ans = 0; 12 13 if (now < f) printf("-1\n"); 14 else 15 { 16 now -= f; 17 for (int i = 1;i < k;i++) 18 { 19 long long d = (i & 1) ? (a - f) : f; 20 21 d <<= 1; 22 23 if (d > now) ans++,now = b; 24 if (d > now) 25 { 26 printf("-1\n"); 27 return 0; 28 } 29 30 now -= d; 31 } 32 33 long long d = (k & 1) ? a - f : f; 34 35 if (d > now) ans++,now = b; 36 if (d > now) printf("-1\n"); 37 else printf("%d\n",ans); 38 } 39 40 return 0; 41 }
康复训练中~欢迎交流!