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;
}

 

posted @ 2020-11-01 21:42  liyongqishiwo  阅读(95)  评论(0编辑  收藏  举报