题目大意:
龙有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, 注定要完蛋了