背景:
最近,北理工出现了一只恶龙,它长着很多 头,而且还会吐火,它将会把北理工烧成废墟, 于是,校长下令召集全校所有勇士杀死这只恶龙。要杀死这只龙,必须把它所有的头都砍掉,每个勇士只能砍一个龙头,龙的每个头大小都不一样,一个勇士只有在身高不小于龙头的直径的情况下才能砍下它。而且勇士们要求,砍下一个龙头必须得到和自己身高厘米数一样的学分。校长想花 最少的学分数 杀死恶龙,于是找到你寻求帮助。
输入:
第一行 龙头数 n , 勇士人数 m ( 1<=n, m<=100 ) 接下来 n 行,每行包含一个整数,表示龙头的直径 接下来 m 行,每行包含一个整数,表示勇士的身高 l
输出:
如果勇士们能完成任务,输出校长需要花的最小费用;否则输 出 “bit is doomed! ”
#include <stdio.h>
#define Max 20
int up_cmp(const void* e1, const void* e2)
{
return *(int*)e1 - *(int*)e2;
}
int main()
{
int gragon[Max] = { 0 };
int people[Max] = { 0 };
int n = 0;
int m = 0;
int sum = 0;
scanf("%d%d", &n, &m);
int i = 0;
int j = 0;
for (i = 0; i < n; i++)
{
scanf("%d", &gragon[i]);//龙头
}
for (j = 0; j < m; j++)
{
scanf("%d", &people[j]);//勇士
}
qsort(gragon, n, sizeof(gragon[0]), up_cmp);//将龙头按照从小到大排序
qsort(people, m, sizeof(people[0]), up_cmp);//将勇士按照从小到大排序
for (i = 0, j = 0; i<n &&j < m;)
{
if (people[j] >= gragon[i]) //将勇士和龙依次比较
{
sum += people[j]; //记录学分
j++;
i++;
}
else
{
j++; //勇士跳到下一位
}
}
if (j == m & i < n) //如果龙有剩余
{
printf("bit is doomed!\n");
}
else if (i == n && j <= m) //如果勇士有剩余
{
printf("%d\n", sum);
}
return 0;
}