• 2020 10 23 个人赛


    C题:

    落了一个条件,啊啊啊,就WA了!

    思路:模拟,计算出加油站前的距离sum1和加油站后的距离sum2,然后模拟每一趟路程,如果此时的油量能够支撑到达下一趟的加油站,就不用加油,否则就需要加油,其中最后一趟需要特判(只需要和这一趟比较即可)。

    另外看题解的时候学会了位运算的意义:a<<b:  a*(2^b)   a>>b:  a/(2^b)

    代码如下:

    #include<bits/stdc++.h>

    using namespace std;

    #define ll long long

    int main()

    {

       ll n,i,j,k;

       ll a,b,f;

       cin>>a>>b>>f>>k;

       if(f>b)

       {

           cout<<-1<<endl;

           return 0;

       }

       ll sum1,sum2;

       sum1=f-0;

       sum2=a-f;

       if(sum2>b)

       {

           cout<<-1<<endl;

           return 0;

       }

       ll tank=b;

       bool flag=1;

       ll ans=0;

       for(i=0;i<k-1;i++)

       {

           if(i&1)

           {

               if(tank<sum2)

               {

                   flag=0;

                   break;

               }

               else if(tank>=(a+sum1))

               {

                   tank-=a;

               }

               else

               {

                   ans++;

                   tank=b-sum1;

               }

           }

           else

           {

               if(tank<f)

               {

                   flag=0;

                   break;

               }

               else if(tank>=(a+sum2))

               {

                   tank-=a;

               }

               else

               {

                   ans++;

                   tank=b-sum2;

               }

           }

       }

       if(i&1)

       {

           if(tank<sum2)

           {

               flag=0;

           }

           else if(tank>=sum2&&tank<a)

           {

               ans++;

           }

           else

           {

               ;

           }

       }

       else

       {

           if(tank<sum1)

           {

               flag=0;

           }

           else if(tank>=sum1&&tank<a)

           {

               ans++;

           }

           else

           {

               ;

           }

       }

       if(flag==0)

       {

           cout<<-1<<endl;

       }

       else

       {

           cout<<ans<<endl;

       }

        return 0;

    }

  • 相关阅读:
    软件测试第四周--闰年问题的非法输入处理
    Edit Boxing三个盒子——等价类划分以及实现
    软件测试--等价类划分的基本概念及实际应用
    对软件测试工具的认识
    软件测试的流程及策略
    几种简单的软件测试模型
    软件开发中的白盒测试
    一种简单的软件测试工具——Visual Studio2010
    int Parse方法引发的异常
    两种软件测试框架——JUnit和NUnit
  • 原文地址:https://www.cnblogs.com/chengxvzhishen/p/13908967.html
Copyright © 2020-2023  润新知