思路:先将龙和士兵进行分别排序从小到大。然后,每次找当前最小龙的第一个大于它的骑手之后退出,开始下一个龙,重复上一次操作。
#include<iostream> #include<algorithm> using namespace std; const int maxn=2e4+10; int a[maxn], b[maxn]; int n, m; int main(){ while(cin>>n>>m){ if(n+m==0)break; for(int i=1;i<=n;++i)cin>>a[i]; for(int i=1;i<=m;++i)cin>>b[i]; sort(a+1, a+n+1); sort(b+1, b+1+m); int ans=0; bool flag1=1; for(int i=1, j=1;i<=n;++i, ++j){ bool flag2=1; for(; j<=m;++j){ if(a[i]<=b[j]){ans+=b[j];flag2=0; break;} } if(flag2){flag1=0; break;} } if(flag1)cout<<ans<<endl; else cout<<"Loowater is doomed!"<<endl; } }