# 2006百度之星程序设计大赛预赛题目之饭团的烦恼 参考解答

#include <string>
#include <vector>
#include <fstream>
#include <iostream>
#include <stdio.h>
#include "math.h"

using namespace std;

struct food
{
string name;
int price;
bool isHun;
bool isXinla;
};

static int nFoodMenu; //菜单上菜的数目
static int nFoodNeed; //饭团需要点的菜的数目
static int nPeople; //就餐的人数

//荤菜，素菜，辛辣，清淡菜
static int nHunFood;
static int nSuFood;
static int nXinFood;
static int nQindanFood;

vector< vector<food> > chosenMenus;

double Distance15yuan(const vector<food>& chosenMenu)
{   //所选菜与15元相差多少
// test price
int totalPrice = 0;
for(vector<food>::const_iterator iter = chosenMenu.begin(); iter != chosenMenu.end(); ++iter)
{
totalPrice += (*iter).price;
}
return abs(totalPrice/nPeople - 15); //8折
}

{
double priceDistance = 1e+308;
double thisDistance = 0.0;
for(vector< vector<food> >::iterator iter = chosenMenus.begin(); iter != chosenMenus.end(); ++iter)
{
thisDistance = Distance15yuan(*iter);
if(thisDistance < priceDistance)
{
priceDistance = thisDistance;
}
}
}

bool TestCondition(vector<food> chosenFood)
{   //是否符合荤菜，素菜，辛辣，清淡菜数量要求
int nTestHunFood = 0;
int nTestSuFood = 0;
int nTestXinFood = 0;
int nTestQindanFood = 0;
for(vector<food>::iterator iter = chosenFood.begin(); iter != chosenFood.end(); ++iter)
{
if((*iter).isHun == true)
{
++nTestHunFood;
}
else
{
++nTestSuFood;
}
}
if(nTestHunFood != nHunFood)
{
return false;
}
if(nTestSuFood != nSuFood)
{
return false;
}

for(vector<food>::iterator iter = chosenFood.begin(); iter != chosenFood.end(); ++iter)
{

if((*iter).isXinla == true)
{
++nTestXinFood;
}
else
{
++nTestQindanFood;
}
}
if(nTestXinFood != nXinFood)
{
return false;
}
if(nTestQindanFood != nQindanFood)
{
return false;
}

return true;
}

void CreateChosenMenus(vector<food>leftFood, vector<food> rightFood)
{
if(leftFood.size() == nFoodNeed)
{
if(TestCondition(leftFood) == true)
{
}
return;
}

for(vector<food>::iterator iter = rightFood.begin(); iter != rightFood.end(); ++iter)
{
vector<food> newLeftFood(leftFood);
newLeftFood.push_back(*iter);
vector<food> newRightFood;

for(vector<food>::iterator i = iter+1; i != rightFood.end(); ++i)
{
newRightFood.push_back(*i);
}

}
}

void TryToSolove()
{
vector<food> left;
}

int main(int argc, char* argv[])
{
ifstream is(argv[1], ios::in | ios::binary);

is >> nFoodNeed;
is >> nPeople;
food temp;

for(int i = 0; i < nFoodMenu; ++i)
{
is >> temp.name;
is >> temp.price;
is >> temp.isHun ;
is >> temp.isXinla;
}
is >> nHunFood;
is >> nSuFood;
is >> nXinFood;
is >> nQindanFood;
TryToSolove();
double averagePrice = 0.0;
for(vector<food>::iterator iter = bestMenu.begin(); iter != bestMenu.end(); ++iter)
{
cout << (*iter).name << endl;
averagePrice += (*iter).price;
}

printf("%0.2f/n", averagePrice/nPeople*0.8);

return 0;
}

• 本文已收录于以下专栏：

## 2015年百度之星程序设计大赛 - 初赛(2)【题解】

1001.追星族 Accepts: 21 Submissions: 122 Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 327...
• u013368721
• 2015年06月02日 16:54
• 2460

## HDU-2017"百度之星"程序设计大赛-初赛(B)-补题

ACM模版昨天没有意识到有比赛，所以错过了，今天早早地就坐在了电脑前等待……但是打了酱油，只签了两道签到题。听说第二道直接 LCA+暴力LCA + 暴力 就能过，愣是没敢写，所以 GGGG 了，第五道...
• f_zyj
• 2017年08月13日 16:46
• 857

## 2015年百度之星程序设计大赛 - 初赛(1) 【题解】

1001.超级赛亚ACMer Accepts: 867 Submissions: 5329 Time Limit: 2000/1000 MS (Java/Others) Memory Li...
• u013368721
• 2015年06月01日 19:13
• 2234

## 2017"百度之星"程序设计大赛 - 初赛（A）

1001 统计p - 1的因子个数 #include #include #include #include #include #include #include #include ...
• sasuke__
• 2017年08月12日 19:54
• 333

## HDU-2017"百度之星"程序设计大赛-初赛(B)-1002-Factory

ACM模版描述题解其实，这个题的题解我是秒出的，当然，之所以没有写是因为这个秒出的题解也是被我秒掉了，我认识他会超时……始终是这样认为的……可是大概数据没有那么刁钻的极限情况，所以直接 LCA+暴力L...
• f_zyj
• 2017年08月14日 16:52
• 418

## HDU4828 Grids 2014年百度之星程序设计大赛 - 初赛（第一轮） Catalan数

• KuribohG
• 2014年05月27日 22:32
• 485

## HDU-2017"百度之星"程序设计大赛-复赛-1003-Pokémon GO

ACM模版描述题解这个题一开始，我想着去 OEISOEIS 查查看，也许可以水过，后来发现不行，接着，就发现这个题和 NYOJNYOJ 上的一个题炒鸡一样，除了题面背景不一样外，其他都是一样的。然后就...
• f_zyj
• 2017年08月18日 16:47
• 385

## 2005年百度之星程序设计大赛试题初赛题目-题2

• mishifangxiangdefeng
• 2012年05月16日 14:24
• 1140

## (数学)2017"百度之星"程序设计大赛 - 初赛(A) 1001

• VonSdite
• 2017年08月12日 18:49
• 390

## 【 2017"百度之星"程序设计大赛 - 初赛（A）1001小C的倍数问题】

【链接】：http://acm.hdu.edu.cn/showproblem.php?pid=6108 【题目】： 小C的倍数问题 Time Limit: 2000/1000 MS (J...
• u013050857
• 2017年08月12日 22:10
• 343

举报原因： 您举报文章：2006百度之星程序设计大赛预赛题目之饭团的烦恼 参考解答 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)