POJ 3646 Dragon of Loowater

题目大意:

        龙有n个头,每个头都有一个直径(int型),有m个骑士,每个骑士都有各自的身高(int型),其中1 ≤ n, m ≤ 20,000,只有身高大于等于头直径的骑士才能砍掉该龙头,并且一个骑士最多只能砍一个头,且每个骑士的佣金等于该骑士的身高,现要求砍掉所有头所需的最少金额。

        现有多个测例,每个测例都给出n和m(以n, m = 0表示输入结束),以及n个头的直径和m个骑士的身高,求出每个测例的中所需的最少砍完所有龙头的金额,如果龙头无法被砍完则输出“Loowater is doomed!”。

题目链接

注释代码:

/*                                        
 * Problem ID : POJ 3646 Dragon of Loowater
 * Author     : Lirx.t.Una                                        
 * Language   : C++                            
 * Run Time   : 32 ms                                        
 * Run Memory : 252 KB                                        
*/

#include <algorithm>
#include <iostream>
#include <cstdio>

//龙和骑士的最大数量
#define	MAXN		20000

using namespace std;

int		d[MAXN];//dragon,存放龙头的直径
int		k[MAXN];//knight,存放每个骑士的价格

int
main() {
	
	int		n, m;//龙头和骑士的数量
	int		dd, kk;//龙头和骑士的计数指针
	int		cost;//雇佣骑士所花的总费用
	
	int		i;//计数变量
	
	while ( scanf("%d%d", &n, &m), n || m ) {
		
		for ( i = 0; i < n; i++ ) scanf("%d", d + i);
		for ( i = 0; i < m; i++ ) scanf("%d", k + i);
		
		sort(d, d + n);//对两者从大到小排序,贪心选择达到最优效果
		sort(k, k + m);
		
		cost = 0;
		for ( dd = 0, kk = 0; kk < m; kk++ )//从骑士开始遍历
			if ( k[kk] >= d[dd] ) {
				
				cost += k[kk];//决定雇佣
				if ( ++dd == n )//如果龙头已经被砍完则成功退出
					break;
			}
			
		if ( dd < n )//龙头没被砍完,输出失败信息
			puts("Loowater is doomed!");
		else
			printf("%d\n", cost);
	}
	
	return 0;
}
无注释代码:

#include <algorithm>
#include <iostream>
#include <cstdio>

#define	MAXN		20000

using namespace std;

int		d[MAXN];
int		k[MAXN];

int
main() {

	int		n, m;
	int		dd, kk;
	int		cost;

	int		i;

	while ( scanf("%d%d", &n, &m), n || m ) {
	
		for ( i = 0; i < n; i++ ) scanf("%d", d + i);
		for ( i = 0; i < m; i++ ) scanf("%d", k + i);

		sort(d, d + n);
		sort(k, k + m);

		cost = 0;
		for ( dd = 0, kk = 0; kk < m; kk++ )
			if ( k[kk] >= d[dd] ) {
			
				cost += k[kk];
				if ( ++dd == n )
					break;
			}

		if ( dd < n )
			puts("Loowater is doomed!");
		else
			printf("%d\n", cost);
	}

	return 0;
}

单词解释:

nuisance:n, 讨厌的人,麻烦的事

minor:adj, 次要的,较小的

shore:n, 海滨

creek:n, 小湾,小溪

goose:n, 鹅

geese:n, 鹅(复数)

predator:n, 捕食者,肉食者

keep clear of:vt, 避开,不接触

occasionally:adv, 偶尔,间或

bite:vt, 咬

tolerate:vt, 容忍(容忍不好的东西)

freak:n, 畸形,变态,怪人

mutation:n, 突变,变异

spawn:vt, 产卵; n, 卵

crisp:n, 松脆易碎物; adj, 松脆易碎的

slay:vt, 杀死,残杀

webbed:adj, 有蹼的

tan:adj, 黄褐色的

cream:n, 奶油

breast:n, 乳房,胸部

feather:n, 羽毛

chin strap:n, 下巴托

bill:n, 鸟喙

knight:n, 骑士

chop:vt, 砍下(chop off)

wage:n, 工资

advisor:n, 顾问,指导

doom:n, 厄运,死亡,世界末日

doomed:adj, 注定要完蛋了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值