CodeForces 625A 思维

题意是说一个人喝酒 有两种办法 买塑料瓶的 a块钱 喝了就没了 或者是买玻璃瓶的b块钱 喝完还能卖了瓶子c块钱 求最多能喝多少瓶

在开始判断一次 a与b-c的关系 即两种方式喝酒的成本

如果a<=b-c 那么直接全部买塑料瓶就行了 没必要买玻璃瓶 因为麻烦 而且会出现钱不够b却够b-c这种情况 很麻烦

如果a>b-c  也就是说买玻璃瓶更省一些 就应当先买玻璃瓶的 不行了再尝试塑料瓶

第一种情况只做一次除法就够了 

第二种情况 如果用while循环(n>b)来做 会超时在test48...醉倒在梨花风凉的夜晚..

在这里有一个技巧 当n>b时 先让n-=b 这时候留的钱可以进行无限次循环喝酒成本  即tot=(n-b)/(b-c)+1  加的一是一开始减去的b的次数 然后再求之后能不能喝塑料瓶

英语好伤..读题耗费了好久...

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<map>
#include<math.h>
using namespace std;
long long int a,b,c;
long long int n;
int xiao;
int main(){
while(~scanf("%lld",&n))
{
    scanf("%lld%lld%lld",&a,&b,&c);
    long long int ans=0;
    if(a<=(b-c))
    {
        while(n>=a)
        {
           long long int tot=n/a;
            ans+=tot;
            n-=tot*a;
        }
        printf("%lld
",ans);
    }
    else if(a>(b-c))
    {
        long long int yu=b-c;
        if(n>=b)
        {
            ans+=(n-b)/ yu+1;
        }
        n-=ans*yu;
        while(n>=a)
        {
          long long  int tot=n/a;
            ans+=tot;
            n-=tot*a;
        }
        printf("%lld
",ans);
    }

}
}

  

原文地址:https://www.cnblogs.com/rayrayrainrain/p/5204144.html