zoukankan      html  css  js  c++  java
  • 【15.07%】【codeforces 625A】Guest From the Past

    time limit per test
    1 second
    memory limit per test
    256 megabytes
    input
    standard input
    output
    standard output
    Kolya Gerasimov loves kefir very much. He lives in year 1984 and knows all the details of buying this delicious drink. One day, as you probably know, he found himself in year 2084, and buying kefir there is much more complicated.
    Kolya is hungry, so he went to the nearest milk shop. In 2084 you may buy kefir in a plastic liter bottle, that costs a rubles, or in glass liter bottle, that costs b rubles. Also, you may return empty glass bottle and get c (c < b) rubles back, but you cannot return plastic bottles.
    Kolya has n rubles and he is really hungry, so he wants to drink as much kefir as possible. There were no plastic bottles in his 1984, so Kolya doesn’t know how to act optimally and asks for your help.
    Input
    First line of the input contains a single integer n (1 ≤ n ≤ 1018) — the number of rubles Kolya has at the beginning.
    Then follow three lines containing integers a, b and c (1 ≤ a ≤ 1018, 1 ≤ c < b ≤ 1018) — the cost of one plastic liter bottle, the cost of one glass liter bottle and the money one can get back by returning an empty glass bottle, respectively.
    Output
    Print the only integer — maximum number of liters of kefir, that Kolya can drink.
    Examples
    input
    10
    11
    9
    8
    output
    2
    input
    10
    5
    6
    1
    output
    2
    Note
    In the first sample, Kolya can buy one glass bottle, then return it and buy one more glass bottle. Thus he will drink 2 liters of kefir.
    In the second sample, Kolya can buy two plastic bottle and get two liters of kefir, or he can buy one liter glass bottle, then return it and buy one plastic bottle. In both cases he will drink two liters of kefir.

    【题目链接】: http://codeforces.com/contest/625/problem/A

    【题解】

    按照常识进行贪心即可。这种题不用着急的。慢慢来就能写出来.

        if (a>=b)
        {
            只买b就好;
            剩下的钱也一直买B,如果不能买就停止
        }
        if (a<b)
        {
            看看b-c是不是小于等于a;
            如果b-c>=a
            只买a;
            如果b-c<a
            {
                if (n>=b)
                {
                    就全都买b看看还剩多少钱.
                    如果能买a就用剩下的钱买a;
                }
                else
                {
                    只买a;
                }
            }
    }


    【完整代码】

    #include <bits/stdc++.h>
    using namespace std;
    #define lson l,m,rt<<1
    #define rson m+1,r,rt<<1|1
    #define LL long long
    #define rep1(i,a,b) for (int i = a;i <= b;i++)
    #define rep2(i,a,b) for (int i = a;i >= b;i--)
    #define mp make_pair
    #define pb push_back
    #define fi first
    #define se second
    #define rei(x) scanf("%d",&x)
    #define rel(x) scanf("%I64d",&x)
    
    typedef pair<int,int> pii;
    typedef pair<LL,LL> pll;
    
    //const int MAXN = x;
    const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
    const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
    const double pi = acos(-1.0);
    
    LL n;
    LL a,b,c;
    
    int main()
    {
        //freopen("F:\rush.txt","r",stdin);
        rel(n);rel(a);rel(b);rel(c);
        LL ans = 0;
        if (a>=b)//b比较便宜
        {
            if (n>=b)
            {
                LL numb = ((n-b)/(b-c))+1;
                //就一直买b
                ans += numb;
            }
            else
                ans = 0;
        }
        else if (a<b)//a比较便宜
        {
            if (b-c>=a)//如果买b每次实际消耗和a一样,那句直接买a就好
            {
                ans = n/a;
            }
            else
                if (b-c<a)//如果买b每次实际消耗更少
                {
                    if (n>=b)
                    {
                        LL numb = ((n-b)/(b-c))+1;
                        //就一直买b
                        ans += numb;
                        n-=numb*(b-c);
                    }
                    else
                        ans = 0;
                    ans += n/a;//剩下有钱再买a
                }
        }
        cout << ans <<endl;
        return 0;
    }
    
  • 相关阅读:
    台州 OJ 3847 Mowing the Lawn 线性DP 单调队列
    洛谷 OJ P1417 烹调方案 01背包
    快速幂取模
    台州 OJ 2649 More is better 并查集
    UVa 1640
    UVa 11971
    UVa 10900
    UVa 11346
    UVa 10288
    UVa 1639
  • 原文地址:https://www.cnblogs.com/AWCXV/p/7626816.html
Copyright © 2011-2022 走看看