题目
解题思路
1.将两个数组进行升序排序,这里的数据规模为20000,所以需要n^2以下的复杂度
2.排好序之后,将两个数组从小到大进行匹配,这里的算法思想是贪心,可以证明这样做是正确的
3.写代码时,主要不要混用C和C++,UVa的judge对此比较严格
4.算法的时间复杂度是O(nlogn+mlogm),空间复杂度是O(n+m)
通过代码
#include<iostream>
#include<algorithm>
using namespace std;
int N[20005];
int M[20005];
int main(){
int n,m;
int i,j;
int min;
while(true)
{
cin>>n;
cin>>m;
if(n*m==0)
break;
for(int x=0;x<n;++x)
cin>>N[x];
for(int x=0;x<m;++x)
cin>>M[x];
sort(N,N+n);
sort(M,M+m);
min=i=j=0;
while(i!=n&&j<m)
{
if(M[j]>=N[i]){
min+=M[j];
++i;++j;
//printf("debug: N=%d M=%d\n",N[i-1],M[j-1]);
}
else
++j;
}
if(i==n)
cout<<min<<endl;
//printf("%d\n",min);
else
cout<<"Loowater is doomed!"<<endl;
}
return 0;
}