来自学妹“ww仙女”の思路:将兔子放入multiset中,由箭来找当前杀得死的血量最大的兔子。
来自学妹"ww仙女"の提示:最后的NO不要写成No哦,别交错题(逃)
代码:
#include <algorithm>
#include <iostream>
#include <cstdio>
#include <set>
#include<vector>
typedef long long ll;
using namespace std;
struct node
{
ll hit,money;
}arr[100050];
bool cmp(node a,node b)
{
return a.money<b.money;
}
multiset<ll>ssr;
ll n,m,ans;
ll a;
int main()
{
while (scanf("%lld %lld",&n,&m)!=EOF)
{
ssr.clear();
for (ll i=0;i<n; i++)
{
scanf("%lld",&a);
ssr.insert(-a);
}
for (ll i=0;i<m; i++)
{
scanf("%lld",&arr[i].hit);
arr[i].hit=-arr[i].hit;
}
for (ll i=0;i<m; i++)
scanf("%lld",&arr[i].money);
if(n>m)
{
printf("No\n");
continue;
}
sort(arr,arr+m,cmp);
multiset<ll>::iterator it;
ll ans=0,flag=0;
for (int i=0;i<=m-1;i++)
{
if(ssr.empty()==1)
{
flag=1;
break;
}
it=ssr.lower_bound(arr[i].hit);
if (it!=ssr.end())
{
ans+=arr[i].money;
ssr.erase(it);
}
}
if(ssr.empty())
flag=1;
if (!flag)
printf("No\n");
else
printf("%lld\n",ans);
}
return 0;
}