這是 meelo 原創(chuàng)的 IEEEXtreme極限編程大賽題解
題目來源 第10屆IEEE極限編程大賽
https://www.hackerrank.com/contests/ieeextreme-challenges/challenges/counting-molecules
Your task is to count the number of molecules in a cup of soda which contains distilled water, carbon dioxide, andglucose. You have a machine that counts the number of atoms of carbon, hydrogen, and oxygen in a given sample.
Input Format
The input consists of a single line with three space separated integers: c, h, and o
where
c is the count of carbon atoms
h is the count of hydrogen atoms
o is the count of oxygen atoms
Constraints
0 ≤ c, h, o < 1010
Output Format
If the number of atoms is consistent with a mixture containing only water, carbon dioxide, and glucose molecules, the output should consist of a single line containing three space separated integers: the number of water molecules, the number of carbon dioxide molecules, and the number of glucose molecules.
If the number of atoms is not consistent with a mixture containing only water, carbon dioxide, and glucose molecules, the output should consist of a line containing the word Error
Sample Input
10 0 20
Sample Output
0 10 0
Explanation
The input indicates that there are 10 carbon atoms and 20 oxygen atoms. The only way that this could occur would be if there were 0 water molecules, 10 carbon dioxide molecules, and 0 glucose molecules.
Note that there are additional sample inputs available if you click on the Run Code
button.
題目解析
這題就是求解一個三元方程組。
三個未知數(shù),三個方程铺然。同時三個方程線性無關(guān)猿诸,有唯一解。
由于物質(zhì)的個數(shù)是非負(fù)整數(shù),約束方程組的解是非負(fù)整數(shù)。
程序
C++
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
/* Enter your code here. Read input from STDIN. Print output to STDOUT */
long long c, h, o;
cin >> c >> h >> o;
if((-4*c+h+2*o)>=0 && (-4*c+h+2*o)%4==0 &&
(-h+2*o)>=0 && (-h+2*o)%4==0 &&
(4*c+h-2*o)>=0 && (4*c+h-2*o)%24==0) {
printf("%lld %lld %lld", (-4*c+h+2*o)/4, (-h+2*o)/4, (4*c+h-2*o)/24);
}
else {
printf("Error");
}
return 0;
}