题意
你手里有 A 个黄水晶和 B 个蓝水晶,其中两个黄水晶可以造一个黄水晶球,三个蓝水晶可以造一个蓝水晶球,一黄一蓝两个水晶可以造一个绿水晶球。
现在你需要 x 个黄水晶球,y 个绿水晶球,z 个蓝水晶球,问你总共还需要多少个水晶能满足要求。
分析
反向考虑,既然 黄水晶 * 2 = 黄水晶球,黄水晶 + 蓝水晶 = 绿水晶球,蓝水晶 * 3 = 蓝水晶球;
那你总共需要的水晶数tot = x * 2 + y + z * 3 + y;
但是并不能直接拿 tot 与 A+B 的大小进行比较,因为可能你黄水晶不够,但蓝水晶很多,导致 A+B >= tot 但是仍然需要水晶的情况发生,所以就需要单独判断;
代码呐
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cstring>
#define maxn 110
#define maxm 500
using namespace std;
long long a,b,x,y,z,ans;
int main(){
cin>>a>>b>>x>>y>>z;
if(x*2+y<=a &&z*3+y<=b){
cout<<0;
return 0;
}
if(x*2+y>a) ans+=x*2+y-a;
if(z*3+y>b) ans+=z*3+y-b;
cout<<ans;
return 0;
}
题解虽短但也用心,不喜勿喷,谢谢啦。