POJ 1929 - Calories from Fat
http://poj.org/problem?id=1929
概要
- fat は 9 C/g
- protein, sugar, starch は 4C/g
- alcohol は 7C/g
とする. fat, protein, sugar, starch, alcohol の摂取量が g か C か % のいずれかの単位で表され,
- ng := n グラム摂取した
- nC := n カロリー摂取した
- n% := 全体のカロリーに対して n % のカロリーをそれで摂取した
という意味.
全体のカロリーに対して fat で摂取したカロリーが何%であるか四捨五入して整数で答える.
制約
- 5つのうち,必ず一つは g か C の単位で表されている
解法
問題文の理解に一番時間がかかった.やるだけ.
poj/1929.cc1 #include <iostream> 2 #include <sstream> 3 #include <vector> 4 #include <cmath> 5 using namespace std; 6 7 int main() 8 { 9 string line; 10 while (getline(cin, line) && line != "-") { 11 double fat = 0.0; 12 double sum = 0.0; 13 do { 14 istringstream iss(line); 15 bool is_percent; 16 int val; 17 int percent = 100; 18 int t = 0; 19 for (int i = 0; i < 5; i++) { 20 int n; 21 char u; 22 iss >> n >> u; 23 if (u == 'g') { 24 static const int tbl[] = {9, 4, 4, 4, 7}; 25 if (i == 0) { 26 is_percent = false; 27 val = n * tbl[i]; 28 } 29 t += n * tbl[i]; 30 } else if (u == 'C') { 31 if (i == 0) { 32 is_percent = false; 33 val = n; 34 } 35 t += n; 36 } else { 37 if (i == 0) { 38 is_percent = true; 39 val = n; 40 } 41 percent -= n; 42 } 43 } 44 const double ttl = 100.0 * t / percent; 45 if (is_percent) { 46 fat += ttl * val / 100.0; 47 } else { 48 fat += val; 49 } 50 sum += ttl; 51 } while (getline(cin, line) && line != "-"); 52 cout << lround(fat / sum * 100.0) << '%' << endl; 53 } 54 return 0; 55 }