zoukankan      html  css  js  c++  java
  • QFNU-ACM 2020.10.23

    C

    题意:给定路程为a,油量为b,加油站为f,进行k次路程,问进行k次路程需要加几次油。

    题解:先要判断下第一次和最后一次,然后根据f*2和(a-f)*2判断x有没有大于它,再根据奇数次还是偶数次用f*2和a-f*2判断。

    代码:

    #include<stdio.h>
    #include<iostream>
    #include<string.h>
    #include<string>
    #include<algorithm>
    #include<queue>
    #include<functional>
    typedef long long LL;
    #define maxn 300005
    using namespace std;
    vector<int>arr[maxn];
    LL n, a, b, k, f,flag,ans,d1,d2,mark,now;
    int main()
    {
        cin >> a >> b >> f >> k;
        d1 = f, d2 = a - f;
        mark = 1;
        now = b;
        while (k&&!flag)
        {
            if (mark%2)
            {
                if (now < d1)
                {
                    flag = 1;
                    break;
                }
                else
                {
                    now -= d1;
                    if (now < 2 * d2&&k!=1)
                    {
                        if (b < d2)
                        {
                            flag = 1;
                            break;
                        }
                        else
                        {
                            now = b - d2;
                            ans++;
                        }
                    }
                    else if (k == 1)
                    {
                        if (now < d2)
                        {
                            if (b < d2)
                            {
                                flag = 1;
                                break;
                            }
                            else
                            {
                                ans++;
                            }
                        }
                    }
                    else if (now >= d2*2)
                    {
                        now -= d2;
                    }
                }
            }
            else
            {
                if (now < d2)
                {
                    flag = 1;
                    break;
                }
                else
                {
                    now -= d2;
                    if (now < d1 * 2 && k != 1)
                    {
                        if (b < d1)
                        {
                            flag = 1;
                            break;
                        }
                        else
                        {
                            ans++;
                            now = b - d1;
                        }
                    }
                    else if (k == 1)
                    {
                        if (now < d1)
                        {
                            if (b < d1)
                            {
                                flag = 1;
                                break;
                            }
                            else
                            {
                                ans++;
                            }
                        }
                    }
                    else if (now >= 2 * d1)
                    {
                        now -= d1;
                    }
                }
            }
            mark++;
            k--;
        }
        if (!flag)
            cout << ans << endl;
        else
            cout << -1 << endl;
        return 0;
    }
  • 相关阅读:
    实现RHEL下KVM虚拟化
    SELinux安全扩展
    配置用户和组信息
    系统级计划任务
    syslog系统日志服务
    VNC远程连接,虚拟网络计算
    系统初始化
    备份与还原文件系统
    使用对象在方法间共享属性
    Python中*和**的使用
  • 原文地址:https://www.cnblogs.com/liyongqi/p/13911840.html
Copyright © 2011-2022 走看看