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