CF912A

题意

你手里有 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;
}

题解虽短但也用心,不喜勿喷,谢谢啦。

原文地址:https://www.cnblogs.com/KnightL/p/13935322.html