zoukankan      html  css  js  c++  java
  • Codeforces Round #436 C. Bus

    题意:一辆车在一条路上行驶,给你路的总长度a,油箱的容量b,加油站在距离起点的距离f,以及需要走多少遍这条路k(注意:不是往返)

         问你最少加多少次油能走完。

    Examples
    Input
    6 9 2 4
    Output
    4
    Input
    6 10 2 4
    Output
    2
    Input
    6 5 4 3
    Output
    -1

    思路:把需要走的路程拉直来看,那么相邻两次经过加油站之间的路程为2*f或2*(a-f),再加上一些特判就好了。

    代码:
    #include<iostream>
    #include<string.h>
    using namespace std;

    long long a,b,f,k;

    int main(){
        cin>>a>>b>>f>>k;
        if(k==1){   //特判只要走一遍时的情况
            if(b>=a)cout<<0<<endl;
            else {
                if(b>=f&&b>=a-f)cout<<1<<endl;
                else cout<<-1<<endl;
            }
            return 0;
        }
        long long x=2*f,y=2*(a-f),sum=f,last=b-f,c=0;
        //x和y记录的是在两次经过加油站之间的路程的两种情况
        //sum记录的是已经走过了多少路程,从第一次经过加油站开始算
        //last记录的是油箱中所剩的油
        //c记录加油次数
        bool flag=1;
        int op=2;
        if(last<0){  //连加油站都走不到
            cout<<-1<<endl;
            return 0;
        }
        while(1){
            if(k*a-sum==f||k*a-sum==a-f){//在最后一次经过加油站时需要特判
                int w;
                if(k*a-sum==f)w=f;
                else w=a-f;
                if(last<w)c++;
                break;
            }
            if(op==1){   //op=1表示x这种情况
                if(last<x){
                    last=b-x;
                    c++;
                }
                else last-=x;
                sum+=x;
                op=2;
            }
            else {     //op=2表示y这种情况
                if(last<y){
                    last=b-y;
                    c++;
                }
                else last-=y;
                sum+=y;
                op=1;
            }
            if(last<0){//如果中间出现了油箱为负的情况,那么表示走不到
                flag=0;
                break;
            }
        }
        if(flag==0)cout<<-1<<endl;
        else cout<<c<<endl;
        return 0;
    }

  • 相关阅读:
    C#获取windos 登录用户信息
    像我这样的人
    只道情深,奈何缘浅(雪之轻裳搜集)
    如果我死了,还剩下什么(雪之轻裳)
    嫁给爱情 还是嫁给现实(搜集)
    排名前 16 的 Java 工具类
    java 获取当前屏幕截图
    转:零售数据观(一):如何花30分钟成为一个标签设计“达人”
    转:数据指标系列:电商数据分析指标体系总结V1.0
    转:领域模型中的实体类分为四种类型:VO、DTO、DO、PO
  • 原文地址:https://www.cnblogs.com/ljy08163268/p/7634723.html
Copyright © 2011-2022 走看看