【大学】北理工的恶龙

背景:
最近,北理工出现了一只恶龙,它长着很多 头,而且还会吐火,它将会把北理工烧成废墟, 于是,校长下令召集全校所有勇士杀死这只恶龙。要杀死这只龙,必须把它所有的头都砍掉,每个勇士只能砍一个龙头,龙的每个头大小都不一样,一个勇士只有在身高不小于龙头的直径的情况下才能砍下它。而且勇士们要求,砍下一个龙头必须得到和自己身高厘米数一样的学分。校长想花 最少的学分数 杀死恶龙,于是找到你寻求帮助。

输入:
第一行 龙头数 n , 勇士人数 m ( 1<=n, m<=100 ) 接下来 n 行,每行包含一个整数,表示龙头的直径 接下来 m 行,每行包含一个整数,表示勇士的身高 l

 输出:
 如果勇士们能完成任务,输出校长需要花的最小费用;否则输 出 “bit is doomed! ”

测试输入期待的输出时间限制内存限制额外进程
测试用例 1以文本方式显示
  1. 2 3↵
  2. 5↵
  3. 4↵
  4. 7↵
  5. 8↵
  6. 4↵
以文本方式显示
  1. 11↵
1秒64M0
测试用例 2以文本方式显示
  1. 2 1↵
  2. 5↵
  3. 5↵
  4. 10↵
以文本方式显示
  1. bit is doomed!↵
1秒64M0
#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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值