Dragon of Loowater UVA - 11292

问题C:Loowater之龙
曾几何时,在Loowater王国,轻微的滋扰变成了一个主要问题。
位于Loowater中部的Rellau Creek海岸一直是鹅的主要繁殖地。由于缺乏捕食者,鹅群失控。Loowater的人们大部分都没有鹅。偶尔,一只鹅会袭击其中一个人,也许会咬掉一两个手指,但总的来说,人们容忍鹅只是轻微的麻烦。

有一天,发生了一次怪异的变异,其中一只鹅产生了一头多头喷火龙。当龙长大后,他威胁要将Loowater王国烧成清脆。Loowater有一个主要问题。国王惊慌失措,并呼吁他的骑士杀死龙并拯救王国。

骑士们解释说:“为了杀死龙,我们必须砍掉所有的头部。每个骑士都可以砍掉龙头之一。龙的头部大小不一。为了砍掉一个头,一个骑士必须至少和头部的直径一样高。骑士团要求,为了砍掉一个头,必须为骑士的每一厘米高度支付一个等于一枚金币的工资。

会不会有足够的骑士击败龙?国王呼吁他的顾问帮助他决定雇用多少骑士和骑士。在建造米尔公园后损失了大量资金后,国王希望尽量减少杀死龙的费用。作为顾问之一,你的工作就是帮助国王。你非常认真地对待它:如果你失败了,你和整个王国都会被烧得一团糟!

输入规范:
输入包含几个测试用例。每个测试用例的第一行包含1到20000之间的两个整数,表示龙有的头数n,以及王国中骑士的数量m。接下来的n行每个都包含一个整数,并以厘米为单位给出龙头的直径。以下m行每个都包含一个整数,并指定Loowater骑士的高度,也以厘米为单位。

最后一个测试用例后跟一行包含:

0 0
输出规格:
对于每个测试用例,输出一行,其中包含国王为杀死龙而需要支付的最小金币数。如果Loowater的骑士不可能杀死龙,输出线:

Loowater注定要失败!
样品输入:
2 3
5
4
7
8
4
2 1
5
5
10
0 0
样品输入输出:
11
Loowater注定要失败!

#include
#include
using namespace std;
const int maxn = 20000;
int A[maxn], B[maxn];
int main()
{
	int n, m;
	while (cin >> n >> m,n,m)
	{
		for (int i = 0; i < n; i++)
			scanf_s("%d", &A[i]);
		for (int i = 0; i < m; i++)
			scanf_s("%d", &B[i]);
		sort(A, A + n);
		sort(B, B + m);
		int cost = 0, sign = 0;
		for (int i = 0,j=0; i < n; i++)
		{
			if (A[i] <= B[j])
			{
				j++;
				cost += B[i];
				sign = 1;
			}
		}
		if (sign==0 || n > m)
			puts("Loowater is doomed!");
		else
			printf("%d\n", cost);
	}
	system("pause");
	return 0;
}

 

你可能感兴趣的:(C++)