背景:
最近,北理工出现了一只恶龙,它长着很多 头,而且还会吐火,它将会把北理工烧成废墟, 于是,校长下令召集全校所有勇士杀死这只恶龙。要杀死这只龙,必须把它所有的头都砍掉,每个勇士只能砍一个龙头,龙的每个头大小都不一样,一个勇士只有在身高不小于龙头的直径的情况下才能砍下它。而且勇士们要求,砍下一个龙头必须得到和自己身高厘米数一样的学分。校长想花 最少的学分数 杀死恶龙,于是找到你寻求帮助。
输入:
第一行 龙头数 n , 勇士人数 m ( 1<=n, m<=100 ) 接下来 n 行,每行包含一个整数,表示龙头的直径 接下来 m 行,每行包含一个整数,表示勇士的身高 l
输出:
如果勇士们能完成任务,输出校长需要花的最小费用;否则输 出 “bit is doomed! ”
测试输入 | 期待的输出 | 时间限制 | 内存限制 | 额外进程 | |
---|---|---|---|---|---|
测试用例 1 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
测试用例 2 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
#include <stdio.h>
void change(int *a, int m) {
int i, j, t;
for (i = 0; i < m ; i++) {
for (j = i + 1; j < m; j++) {
if (a[i] > a[j]) {
t = a[i], a[i] = a[j], a[j] = t;
}
}
}
}
int minmax(int a, int *b, int n) {
int ji;
if (a > b[n - 1])
ji = -1;//如果龙头直径比最高的勇士身高长,就ji了
for (int j = 0; j < n; j++) {
if (b[j] >= a) {//找到比龙头直径大的勇士中最矮的那个
ji = b[j];
b[j] = 0;
break;
}
}
return ji;
}
int main() {
int dragon[101] = {0}, warrior[101] = {0}, m, zhiyin, i, k, u, n;
scanf("%d %d", &m, &n);
for (i = 0; i < m; i++)
scanf("%d", &dragon[i]);
for (i = 0; i < n; i++)
scanf("%d", &warrior[i]);
if (m > n)
printf("bit is doomed!\n");
else {
u = 0; //u为总和
change(dragon, m), change(warrior, n);//从小到大排序
for (i = 0; i < m; i++) {
zhiyin = minmax(dragon[i], warrior, n);
if (zhiyin == -1)
break;
u = u + zhiyin;
}
if (zhiyin == -1)
printf("bit is doomed!\n");
else
printf("%d\n", u);
}
return 0;
}