您的位置:首页 > 其它

CodeForces 625A 思维

2016-02-20 22:23 357 查看
题意是说一个人喝酒 有两种办法 买塑料瓶的 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\n",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\n",ans);
}

}
}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: