水题一个,两个排序解决问题
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
int n,m,sum;
int head[20005]={0};
int loo[20005]={0};
while (~scanf ("%d %d",&n,&m)&&n&&m)
{
sum=0;
memset (head,0,sizeof(head));
memset (loo,0,sizeof (loo));
for (int i=0;i<n;i++)
scanf ("%d",&head[i]);
for (int i=0;i<m;i++)
scanf ("%d",&loo[i]);
sort (loo,loo+m);
sort (head,head+n);
int i=0,j=0;
bool flag=true;
if (m<n)//骑士的数量少于恶龙头的数量,一定无解
flag=false;
while (i<n&&flag)
{//为恶龙的每一个头找一个花费最小的骑士
while (j<m&&loo[j]<head[i])
j++;
if (m-j<n-i)
{
flag=false;
break;
}
if (loo[j]>=head[i])
{
sum+=loo[j];
i++,j++;
}
}
if (flag)
printf ("%d\n",sum);
else
printf ("Loowater is doomed!\n");
}
return 0;
}