標籤:
P2729 飼料調配 Feed Ratios
-
- 36通過
- 103提交
- 題目提供者該使用者不存在
- 標籤USACO
- 難度普及/提高-
提交 討論 題解
最新討論
題目背景
農夫約翰從來只用調配得最好的飼料來喂他的奶牛。飼料用三種原料調配成:大麥,燕麥和小麥。他知道自己的飼料精確的配比,在市場上是買不到這樣的飼料的。他只好購買其他三種混合飼料(同樣都由三種麥子組成),然後將它們混合,來調配他的完美飼料。
題目描述
給出三組整數,表示 大麥:燕麥:小麥 的比例,找出用這三種飼料調配 x:y:z 的飼料的方法。
例如,給出目標飼料 3:4:5 和三種飼料的比例:
1:2:3 3:7:1 2:1:2 你必須編程找出使這三種飼料用量最少的方案,要是不能用這三種飼料調配目標飼料,輸出“NONE”。“用量最少”意味著三種飼料的用量(整數)的和必須最小。
對於上面的例子,你可以用8份飼料1,1份飼料2,和5份飼料3,來得到7份目標飼料:
8*(1:2:3) + 1*(3:7:1) + 5*(2:1:2) = (21:28:35) = 7*(3:4:5)
表示飼料比例的整數以及目標飼料的都是小於100的非負整數。表示各種飼料的份數的整數,都小於100。一種混合物的比例不會由其他混合物的比例直接相加得到。
輸入輸出格式
輸入格式:
Line 1: 三個用空格分開的整數,表示目標飼料
Line 2..4: 每行包括三個用空格分開的整數,表示農夫約翰買進的飼料的比例
輸出格式:
輸出檔案要包括一行,這一行要麼有四個整數,要麼是“NONE”。前三個整數表示三種飼料的份數,用這樣的配比可以得到目標飼料。第四個整數表示混合三種飼料後得到的目標飼料的份數。
輸入輸出範例
輸入範例#1:
3 4 5
1 2 3
3 7 1
2 1 2
輸出範例#1:
8 1 5 7
說明
題目翻譯來自NOCOW。
USACO Training Section 3.2
分析:剛開始沒有頭緒,但是看到都不超過100,就能想到這是枚舉,因為只有三種飼料,那麼枚舉這三種飼料的數量,然後計算比例,如果發現一個比例和其他的比例不一樣,那麼就跳過,如果需求為0,則不能直接除,要特殊處理.
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;int a[5], b[5], c[5], ta, tb, tc,bi;int main(){ scanf("%d%d%d", &a[0], &b[0], &c[0]); for (int i = 1; i <= 3; i++) scanf("%d%d%d", &a[i], &b[i], &c[i]); for (int i = 0; i < 100; i++) for (int j = 0; j < 100; j++) for (int k = 0; k < 100; k++) { ta = i * a[1] + j * a[2] + k * a[3]; tb = i * b[1] + j * b[2] + k * b[3]; tc = i * c[1] + j * c[2] + k * c[3]; bi = 0; if (a[0] != 0) bi = ta / a[0]; if (b[0] != 0) if (bi == 0) bi = tb / b[0]; else if (bi != tb / b[0]) continue; if (c[0] != 0) if (bi == 0) bi = tc / c[0]; else if (bi != tc / c[0]) continue; if (bi != 0 && a[0] * bi == ta && b[0] * bi == tb && c[0] * bi == tc) { printf("%d %d %d %d\n", i, j, k,bi); return 0; } } printf("NONE\n"); return 0;}
洛穀P2729 飼料調配 Feed Ratios