• 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 }
  • 相关阅读:
    linux之sed用法
    vim 设置tab空格个数
    centos 7远程登陆win10
    linux find命令学习
    CENTOS 7 修改默认启动内核
    Centos7更改默认启动模式
    centos 7创建桌面快捷方式
    修改centos中文为英文显示
    正则的sub
    超时或错误重试
  • 原文地址:https://www.cnblogs.com/kickit/p/7595211.html
Copyright © 2020-2023  润新知