分析:
能力强的骑士开高价是合理的
但是不能大材小用,所以我们直接贪心
把龙和骑士排序之后,
一个一个砍就行了
当然,不能砍掉“当前需要砍掉的头”的骑士我们就不用再考虑ta了
tip
成功的砍掉一个头之后,不要忘了把骑士的指针向后推移一位
附图:
//这里写代码片
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int M=20005;
int a[M],b[M];
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)&&n&&m)
{
int i,j=0,sum=0;
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<m;i++)
scanf("%d",&b[i]);
sort(a,a+n);
sort(b,b+m);
for(i=0;i<m;i++)
if(b[i]>=a[j])
{
sum+=b[i];
if(++j==n) break;
}
if(j<n) printf("Loowater is doomed!
");
else printf("%d
",sum);
}
return 0;
}
当然,还有一种更优美的写法:
//这里写代码片
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n,m;
int dragon[20010],knight[20010];
int ans=0;
int main()
{
while (scanf("%d%d",&n,&m)!=EOF&&n&&m)
{
for (int i=1;i<=n;i++) scanf("%d",&dragon[i]);
for (int i=1;i<=m;i++) scanf("%d",&knight[i]);
if (n>m)
{
printf("Loowater is doomed!
");
continue;
}
sort(dragon+1,dragon+1+n);
sort(knight+1,knight+1+m);
ans=0;
int cnt=1;
for (int i=1;i<=m;i++)
if (knight[i]>=dragon[cnt])
{
ans+=knight[i];
if (++cnt>n) break;
}
if (cnt<n) printf("Loowater is doomed!
");
else printf("%d
",ans);
}
return 0;
}