您的位置:首页 > 其它

SRM 219 Div II Level Two: HealthFood

2013-07-15 22:06 661 查看
题目来源:http://community.topcoder.com/stat?c=problem_statement&pm=3118

方法比较直接,用swicth判断选择标准,如果结果唯一的话,则返回,否则判断下一个标准!

代码如下:

#include <algorithm>
#include <iostream>
#include <string>
#include <vector>

using namespace std;

class HealthFood {
private:
vector <int> getH(vector <int> &carbs, vector <int> &indexs)
{
vector <int> ans;
int maxc = -1;

for (int i = 0; i < indexs.size(); i++) {
if (carbs[ indexs[i] ] > maxc) {
maxc = carbs[ indexs[i] ];
}
}

for (int i = 0; i < indexs.size(); i++) {
if (maxc == carbs[ indexs[i] ]) {
ans.push_back(indexs[i]);
}
}
return ans;
}
vector <int> getL(vector <int> &carbs, vector <int> &indexs)
{
vector <int> ans;
int minc = 1000;

for (int i = 0; i < indexs.size(); i++) {
if (carbs[ indexs[i] ] < minc) {
minc = carbs[ indexs[i] ];
}
}

for (int i = 0; i < indexs.size(); i++) {
if (minc == carbs[ indexs[i] ]) {
ans.push_back(indexs[i]);
}
}
return ans;
}
vector <int> getHT(vector <int> &protein, vector <int> &carbs, vector <int> &fat, vector <int> &indexs)
{
vector <int> ans;
vector <int> total(protein.size());
int maxt = -1;

for (int k = 0; k < protein.size(); k++) {
total[k] = 5 * (protein[k] + carbs[k]) + 9 * fat[k];
}

for (int i = 0; i < indexs.size(); i++) {
if (total[ indexs[i] ] > maxt) {
maxt = total[ indexs[i] ];
}
}

for (int i = 0; i < indexs.size(); i++) {
if (maxt == total[ indexs[i] ]) {
ans.push_back(indexs[i]);
}
}

return ans;
}
vector <int> getLT(vector <int> &protein, vector <int> &carbs, vector <int> &fat, vector <int> &indexs)
{
vector <int> ans;
vector <int> total(protein.size());
int mint = 1000000;

for (int i = 0; i < protein.size(); i++) {
total[i] = 5 * (protein[i] + carbs[i]) + 9 * fat[i];
}

for (int i = 0; i < indexs.size(); i++) {
if (total[ indexs[i] ] < mint) {
mint = total[ indexs[i] ];
}
}

for (int i = 0; i < indexs.size(); i++) {
if (mint == total[ indexs[i] ]) {
ans.push_back(indexs[i]);
}
}

return ans;
}

public:
vector <int> selectMeals(vector <int> protein, vector <int> carbs, vector <int> fat, vector <string> dietPlans) {
vector <int> res;
int plan_num = dietPlans.size();

for (int i = 0; i < plan_num; i++) {
if ("" == dietPlans[i]) {
res.push_back(0);
continue;
}
vector <int> indexs;
for (int k = 0; k < protein.size(); k++) {
indexs.push_back(k);
}
bool flag = false;

for (int j = 0; j < dietPlans[i].size(); j++) {
switch (dietPlans[i][j]) {
case 'C':
indexs = getH(carbs, indexs);
break;
case 'c':
indexs = getL(carbs, indexs);
break;
case 'P':
indexs = getH(protein, indexs);
break;
case 'p':
indexs = getL(protein, indexs);
break;
case 'F':
indexs = getH(fat, indexs);
break;
case 'f':
indexs = getL(fat, indexs);
break;
case 'T':
indexs = getHT(protein, carbs, fat, indexs);
break;
case 't':
indexs = getLT(protein, carbs, fat, indexs);
break;
}

if (1 == indexs.size()) {
res.push_back(indexs[0]);
flag = true;
} else {
if (j == dietPlans[i].size() - 1) {
res.push_back(indexs[0]);
flag = true;
} else {
continue;
}
}
if (flag) {
break;
}
}
}

return res;
}

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: