2006 年百度之星程序设计大赛初赛题目 1 饭团的烦恼
2013-05-18 21:57
218 查看
2006 年百度之星程序设计大赛初赛题目 1 饭团的烦恼
饭团的烦恼
“午餐饭团“是百度内部参与人数最多的民间组织。
同一个部门的,同一间大学的,同一年出生的,用同一种型号电脑的,员工们总是以各种理由,各种借口组织各种长久的,临时的饭团。
参加饭团,不仅可以以优惠的价格尝到更加丰富的菜式,还可以在吃饭的时候和同事们唠唠嗑,吹吹水,增进感情。
但是,随着百度的员工越来越多,各个饭团的管理随即变得烦杂。特别是为了照顾员工们越来越挑剔的胃口,
饭团的点菜负责人背负的责任越来越大。现在,这个重担落在百度之星的肩上,
因为,你们将要为所有的百度饭团设计一个自动点菜的算法。
饭团点菜的需求如下:
1 . 经济是我们要考虑的一个因素,既要充分利用百度员工的午餐补助,又不能铺张浪费。
因此,我们希望最后的人均费用越接近 12 元越好。
2 . 菜式丰富是我们要考虑的另一个因素。为简单起见,我们将各种菜肴的属性归结为荤菜,素菜,辛辣,清淡,并且每个菜只能点一次。
3 . 请紧记,百度饭团在各大餐馆享受 8 折优惠。
输入数据描述如下:
第一行包含三个整数 N , M , K ( 0<N<=16 , 0<M<=N , 0<K<=12 ),
分别表示菜单上菜的数目,饭团需要点的菜的数目,就餐的人数。
紧接着 N 行,每行的格式如下:
菜名(长度不超过 20 个字符) 价格(原价,整数) 是否荤菜( 1 表示是, 0 表示否) 是否辛辣( 1 表示是, 0 表示否)
例:
水煮鱼 30 1 1
紧接着是 a b c d 四个整数,分别表示需要点的荤菜,素菜,辛辣,清淡菜的数目。
输出数据:
对于每一测试数据,输出数据包含 M+1 行,前 M 行每行包含一个菜名(按菜名在原菜单的顺序排序)。第 M+1 行是人均消费,结果保留两位小数。
说明:
1 .结果菜单的数目应该恰好为 M ,荤菜,素菜,辛辣,清淡菜的数目恰好为 a , b , c , d 。
在满足这样的前提下,选择人均消费最接近 12 元的点菜方案。题目数据保证有且仅有一个解。
2 .每组测试数据的结果用一个空行隔开。末尾不要有多余的空行。
输入样例
3 2 2
水煮鱼 30 1 1
口水鸡 18 1 1
清炖豆腐 12 0 0
输出样例
口水鸡
清炖豆腐
12.00
时间要求: 1S 之内
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.*;
public class T06_1 {
private static int aa1, bb1, cc1, dd1;//记录 荤菜,素菜,辛辣,清淡菜的数目
private static double sum1=0;
public static void main(String[] args) {
long time1 = System.currentTimeMillis();
int a, b, c, d;
double sum = 0;//人均消费
int number[],number1[];//记录 菜谱的下标
int n = 3;
int m = 2;
int k = 2;
Scanner sc = new Scanner(new BufferedInputStream(System.in));
n=sc.nextInt();
m=sc.nextInt();
k=sc.nextInt();
String s[][] = new String
[4];
number = new int[m];
number1 = new int[m];
for (int i = 0; i < n; i++) {
s[i][0] = sc.next();
s[i][1] = sc.next();
s[i][2] = sc.next();
s[i][3] = sc.next();
}
a = b = c = d = 1;
int count = 0;
for (int i = 0; i < s.length; i++) {
aa1 = bb1 = cc1 = dd1 = 0;
checkFood(s[i][2], s[i][3]);//检查荤菜,素菜,辛辣,清淡菜 是否符合要求
count = 0;//统计满足要求的菜谱
number[count] = i;
count++;
loop: for (int j = i + 1; j < s.length; j++) {
checkFood(s[j][2], s[j][3]);
if (aa1 > a||bb1 > b||cc1 > c||dd1 > d)
continue loop;
else
number[count] = j;//将满足要的猜的下标加入数组
count++;
if (count == m) {
for (int ad = 0; ad < number.length; ad++) {
sum += Double.parseDouble(s[number[ad]][1]);
number1[ad]=number[ad];
}
sum = (sum * 0.8) / 2;
if (Math.abs(sum-12.00)<=sum1) {
sum1=sum;
}
}
}
}
if(sum1!=0){
for (int ad = 0; ad < number.length; ad++) {
System.out.println(s[number1[ad]][0]);
}
System.out.printf("%.2f\n",sum1);
}
long time2 = System.currentTimeMillis();
System.out.println((time2 - time1) + "ms");
}
public static void checkFood(String s1, String s2) {
if (s1.equals("1") && s2.equals("1")) {
aa1++;
cc1++;
} else if (s1.equals("1") && s2.equals("0")) {
aa1++;
dd1++;
} else if (s1.equals("0") && s2.equals("1")) {
bb1++;
cc1++;
} else {
bb1++;
dd1++;
}
}
}
饭团的烦恼
“午餐饭团“是百度内部参与人数最多的民间组织。
同一个部门的,同一间大学的,同一年出生的,用同一种型号电脑的,员工们总是以各种理由,各种借口组织各种长久的,临时的饭团。
参加饭团,不仅可以以优惠的价格尝到更加丰富的菜式,还可以在吃饭的时候和同事们唠唠嗑,吹吹水,增进感情。
但是,随着百度的员工越来越多,各个饭团的管理随即变得烦杂。特别是为了照顾员工们越来越挑剔的胃口,
饭团的点菜负责人背负的责任越来越大。现在,这个重担落在百度之星的肩上,
因为,你们将要为所有的百度饭团设计一个自动点菜的算法。
饭团点菜的需求如下:
1 . 经济是我们要考虑的一个因素,既要充分利用百度员工的午餐补助,又不能铺张浪费。
因此,我们希望最后的人均费用越接近 12 元越好。
2 . 菜式丰富是我们要考虑的另一个因素。为简单起见,我们将各种菜肴的属性归结为荤菜,素菜,辛辣,清淡,并且每个菜只能点一次。
3 . 请紧记,百度饭团在各大餐馆享受 8 折优惠。
输入数据描述如下:
第一行包含三个整数 N , M , K ( 0<N<=16 , 0<M<=N , 0<K<=12 ),
分别表示菜单上菜的数目,饭团需要点的菜的数目,就餐的人数。
紧接着 N 行,每行的格式如下:
菜名(长度不超过 20 个字符) 价格(原价,整数) 是否荤菜( 1 表示是, 0 表示否) 是否辛辣( 1 表示是, 0 表示否)
例:
水煮鱼 30 1 1
紧接着是 a b c d 四个整数,分别表示需要点的荤菜,素菜,辛辣,清淡菜的数目。
输出数据:
对于每一测试数据,输出数据包含 M+1 行,前 M 行每行包含一个菜名(按菜名在原菜单的顺序排序)。第 M+1 行是人均消费,结果保留两位小数。
说明:
1 .结果菜单的数目应该恰好为 M ,荤菜,素菜,辛辣,清淡菜的数目恰好为 a , b , c , d 。
在满足这样的前提下,选择人均消费最接近 12 元的点菜方案。题目数据保证有且仅有一个解。
2 .每组测试数据的结果用一个空行隔开。末尾不要有多余的空行。
输入样例
3 2 2
水煮鱼 30 1 1
口水鸡 18 1 1
清炖豆腐 12 0 0
输出样例
口水鸡
清炖豆腐
12.00
时间要求: 1S 之内
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.*;
public class T06_1 {
private static int aa1, bb1, cc1, dd1;//记录 荤菜,素菜,辛辣,清淡菜的数目
private static double sum1=0;
public static void main(String[] args) {
long time1 = System.currentTimeMillis();
int a, b, c, d;
double sum = 0;//人均消费
int number[],number1[];//记录 菜谱的下标
int n = 3;
int m = 2;
int k = 2;
Scanner sc = new Scanner(new BufferedInputStream(System.in));
n=sc.nextInt();
m=sc.nextInt();
k=sc.nextInt();
String s[][] = new String
[4];
number = new int[m];
number1 = new int[m];
for (int i = 0; i < n; i++) {
s[i][0] = sc.next();
s[i][1] = sc.next();
s[i][2] = sc.next();
s[i][3] = sc.next();
}
a = b = c = d = 1;
int count = 0;
for (int i = 0; i < s.length; i++) {
aa1 = bb1 = cc1 = dd1 = 0;
checkFood(s[i][2], s[i][3]);//检查荤菜,素菜,辛辣,清淡菜 是否符合要求
count = 0;//统计满足要求的菜谱
number[count] = i;
count++;
loop: for (int j = i + 1; j < s.length; j++) {
checkFood(s[j][2], s[j][3]);
if (aa1 > a||bb1 > b||cc1 > c||dd1 > d)
continue loop;
else
number[count] = j;//将满足要的猜的下标加入数组
count++;
if (count == m) {
for (int ad = 0; ad < number.length; ad++) {
sum += Double.parseDouble(s[number[ad]][1]);
number1[ad]=number[ad];
}
sum = (sum * 0.8) / 2;
if (Math.abs(sum-12.00)<=sum1) {
sum1=sum;
}
}
}
}
if(sum1!=0){
for (int ad = 0; ad < number.length; ad++) {
System.out.println(s[number1[ad]][0]);
}
System.out.printf("%.2f\n",sum1);
}
long time2 = System.currentTimeMillis();
System.out.println((time2 - time1) + "ms");
}
public static void checkFood(String s1, String s2) {
if (s1.equals("1") && s2.equals("1")) {
aa1++;
cc1++;
} else if (s1.equals("1") && s2.equals("0")) {
aa1++;
dd1++;
} else if (s1.equals("0") && s2.equals("1")) {
bb1++;
cc1++;
} else {
bb1++;
dd1++;
}
}
}
相关文章推荐
- 2006年百度之星程序设计大赛试题初赛题目-题1-饭团的烦恼
- 2006年百度之星程序设计大赛初赛题目1:饭团的烦恼
- 2006 年百度之星程序设计大赛初赛题目 6 百度语言翻译机
- 2006 年百度之星程序设计大赛初赛题目 6 百度语言翻译机
- 2006 年百度之星程序设计大赛初赛题目 6 百度语言翻译机
- 2006 年百度之星程序设计大赛初赛题目 3 变态的比赛规则
- 2006百度之星程序设计大赛预赛题目之饭团的烦恼 参考解答
- 2006 年百度之星程序设计大赛初赛题目 5
- 2006 年百度之星程序设计大赛初赛题目 4 剪刀石头布
- php解:2006 年百度之星程序设计大赛初赛题目 3 ----变态的比赛规则
- 2006 年百度之星程序设计大赛初赛题目---座位调整--菜鸟学习算法
- 2006 年百度之星程序设计大赛初赛题目--座位调整
- 2005年百度之星程序设计大赛试题初赛题目-题3
- 2006年百度之星程序设计大赛试题初赛题目-题3-变态的比赛规则
- 2007年百度之星程序设计大赛试题初赛题目-题2-Wii 游戏开始啦!
- 2006年百度之星程序设计大赛初赛题目2:蝈蝈式的记分
- 2007年百度之星程序设计大赛试题初赛题目-题2-Wii 游戏开始啦!
- java解答 2005年百度之星程序设计大赛试题初赛题目
- 2005年百度之星程序设计大赛初赛题目(1)
- 2005年百度之星程序设计大赛试题初赛题目-题4