Hdu 5437 Alisha’s Party(模拟)

来源:互联网 发布:剑灵好玩吗 知乎 编辑:程序博客网 时间:2024/05/16 16:03

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=5437

思路:优先队列模拟,注意最后一次门外人全部进入。

#include<cstdio>#include<queue>#include<cstring>#include<iostream>#include<algorithm>#define debuusing namespace std;const int maxn=150000+50;struct Node{    int id,val;    Node(int id=0,int val=0):id(id),val(val) {}    bool operator < (const Node &rhs) const    {        if(val==rhs.val) return id>rhs.id;        else return val<rhs.val;    }};int t,n,m,Q;vector<int> ans;char name[maxn][250];priority_queue<Node> q;int val[maxn],open[maxn],cmd[maxn];int main(){#ifdef debug    freopen("in.in","r",stdin);#endif // debug    scanf("%d",&t);    while(t--)    {        ans.clear();        memset(open,0,sizeof(open));        scanf("%d%d%d",&n,&m,&Q);        for(int i=1; i<=n; i++)            scanf("%s%d",name[i],&val[i]);        for(int i=0; i<m; i++)        {            int id,num;            scanf("%d%d",&id,&num);            open[id]=num;        }        for(int i=0; i<Q; i++)            scanf("%d",&cmd[i]);        for(int i=1; i<=n; i++)        {            q.push(Node(i,val[i]));            int tot=open[i];            while(!q.empty()&&tot)            {                //cout<<q.top().id<<endl;                ans.push_back(q.top().id);                tot--,q.pop();            }        }        while(!q.empty())        {            //cout<<q.top().id<<endl;            ans.push_back(q.top().id);            q.pop();        }        for(int i=0; i<Q-1; i++)            printf("%s ",name[ans[cmd[i]-1]]);        printf("%s\n",name[ans[cmd[Q-1]-1]]);    }    return 0;}



0 0
原创粉丝点击