zoukankan      html  css  js  c++  java
  • CodeForces

    https://vjudge.net/problem/CodeForces-864C

    题意:两地之间有个加油站,往返走k个单程,最少加油多少次。

    大佬几十行代码就解决,我却要用一百多行的if语句模拟解决。

    #include<stdio.h>
    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<math.h>
    #include<string>
    #include<queue>
    #define ll long long
    #define inf 0x3f3f3f3f
    using namespace std;
    
    ll a,b,f,k;
    ll one,two;///加油站左边路程为one,右边路程为two
    ll t;
    ll nowb;
    ll sum;
    
    int main()
    {
        while(scanf("%lld %lld %lld %lld",&a,&b,&f,&k)!=EOF)
        {
            one=f;
            two=a-f;
            nowb=b;            ///当前体力
            sum=a*k;           ///总路程
            t=0;               ///补充体力次数
            ll i;              ///当前走了多少路程
            bool flag=true;   ///能否走到
            int now=1;        ///now表示方向,1为右,-1为左
    
            for(i=0;i<sum;)///不加等于,不要i++
            {
                if(i==0)///刚出发
                {
                    if(nowb>=one)///能走到加油站
                    {
                        i+=one;
                        nowb-=one;
                    }
                    else///否则直接凉
                    {
                        flag=false;
                        break;
                    }
                }
                else if( k%2 && i==sum-two)///奇数次,最后向右,最后要走two这一段
                {
                    if(nowb>=two)///走得到
                    {
                        i+=two;
                        nowb-=two;
                    }
                    else///走不到,加完再看能不能到
                    {
                        nowb=b;
                        t++;
                        if(nowb>=two)
                        {
                            i+=two;
                            nowb-=two;
                        }
                        else
                        {
                            flag=false;
                            break;
                        }
                    }
                }
                else if( k%2==0 && i==sum-one)///偶数次,最后向左,最后要走one这一段
                {
                    if(nowb>=one)
                    {
                        i+=one;
                        nowb-=one;
                    }
                    else
                    {
                        nowb=b;
                        t++;
                        if(nowb>=one)
                        {
                            i+=one;
                            nowb-=one;
                        }
                        else
                        {
                            flag=false;
                            break;
                        }
                    }
                }
                else ///中间跑路,走两段one或者two
                {
                    if(now==1)///往右跑
                    {
                        if(nowb>=2*two)///跑得到,减油,改方向
                        {
                            i+=2*two;
                            nowb-=2*two;
                            now=-1;
                        }
                        else ///否则,加油
                        {
                            t++;
                            nowb=b;
                            if(nowb>=2*two)///加完看能不能跑到
                            {
                                i+=2*two;
                                nowb-=2*two;
                                now=-1;
                            }
                            else
                            {
                                flag=false;
                                break;
                            }
                        }
                    }
                    else ///往左跑
                    {
                        if(nowb>=2*one)
                        {
                            i+=2*one;
                            nowb-=2*one;
                            now=1;
                        }
                        else ///否则,加油
                        {
                            t++;
                            nowb=b;
                            if(nowb>=2*one)///加完看能不能跑到
                            {
                                i+=2*one;
                                nowb-=2*one;
                                now=1;
                            }
                            else
                            {
                                flag=false;
                                break;
                            }
                        }
                    }
    
                }
            }
            if(flag)
                printf("%d
    ",t);
            else
                printf("-1
    ");
        }
        return 0;
    }
    View Code
  • 相关阅读:
    SpringMVC金课-课程大纲
    Type Cannot change version of project facet Dynamic Web Module to 3.0.
    使用maven 创建web项目 + 搭建SSM框架
    多文件上传
    asp.net 连接access数据库方法
    分享代码
    DIV+CSS解决IE6,IE7,IE8,FF兼容问题(转至http://www.douban.com/note/163291324/)
    asp.net发布网站(转)
    Img垂直居中
    http://www.apkbus.com/android-6231-1.html
  • 原文地址:https://www.cnblogs.com/shoulinniao/p/10732498.html
Copyright © 2011-2022 走看看