hdu-4544-湫湫系列故事——消灭兔子-贪心+stl

来源:互联网 发布:超级基因优化液女主角 编辑:程序博客网 时间:2024/06/09 19:19

http://acm.hdu.edu.cn/showproblem.php?pid=4544

先排序直接贪心判断是否能杀死所有兔子

然后 按降序遍历兔子的生命值

把大于等于当前兔子生命值的箭都丢进优先队列or set 然后每次贪心选最小的即可


#include <cstdio>#include <cmath>#include <cstring>#include <string>#include <algorithm>#include <queue>#include <map>#include <set>#include <vector>#include <iostream>using namespace std;const double pi=acos(-1.0);double eps=0.000001;int d[100005];int b[100005];int p[100005];struct node{    int   d,p;    node() {}    node(int a,int b)    {        d=a,p=b;    }    bool operator <(const node&b) const    {        return p>b.p;    }};bool cmp(node a,node b){    return a.d>b.d;}node tmp[100005];priority_queue<node> q;int main(){    int n,m;    while(cin>>n>>m)    {        int i,j;        while(!q.empty()) q.pop();        for (i=1; i<=n; i++) scanf("%d",&b[i]);        for (i=1; i<=m; i++) scanf("%d",&d[i]);        for (i=1; i<=m; i++) scanf("%d",&p[i]);        for (i=1; i<=m; i++)            tmp[i].d=d[i],tmp[i].p=p[i];        if (m<n)        {            printf("No\n");            continue;        }        sort(b+1,b+1+n);        sort(tmp+1,tmp+1+m,cmp);        int idx=1;        int flag=0;        for (i=n; i>=1; i--)        {            if (tmp[idx].d>=b[i]) ;            else            {                flag=1;                break;            }            idx++;        }        if (flag)        {            printf("No\n");            continue;        }        idx=1;        long long sum=0;        for (i=n; i>=1; i--)        {            for (j=idx; j<=m; j++)            {                if (tmp[j].d>=b[i])                {                    q.push(tmp[j]);                    if (j==m) idx=m+1;                }                else                {                    idx=j;                    break;                }            }            sum+=q.top().p;            q.pop();        }        printf("%lld\n",sum);    }     return 0;}


0 0
原创粉丝点击