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
");
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
");
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
");
37         else printf("%d
",ans);
38     }
39 
40     return 0;
41 }
原文地址:https://www.cnblogs.com/kickit/p/7595211.html