您的位置:首页 > 其它

POJ5437-Alisha’s Party

2015-09-16 13:57 323 查看
优先队列,注意对时间排序,不要越界(越界WA了好多次)

#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<map>
#include<set>
#include<string>
#include<algorithm>
#include<queue>
#include<stack>
using namespace std;
struct node
{
    char name[205];
    int v,id;
}a[150005];;
bool operator<(const node &a,const node &b) {
        if(a.v==b.v) return a.id>b.id;
        return a.v<b.v;
}
struct time
{
    int t;
    int p;
}b[150005];
int cmp(time a,time b)
{
    return a.t<b.t;
}
int main(){

    int cas;
    scanf("%d",&cas);
    int k,m,q;
    while(cas--)
    {
        priority_queue<node> xl;
        scanf("%d%d%d",&k,&m,&q);
        for(int i=0;i<k;i++){
            scanf("%s%d",a[i].name,&a[i].v);
            a[i].id=i;
        }
        for(int i=0;i<m;i++)
            scanf("%d%d",&b[i].t,&b[i].p);

        int t=1;
        sort(b,b+m,cmp);
        int ans[150005];
        int  y=0;

        for(int i=0;i<k;i++){
            xl.push(a[i]);
            if(y<m&&i+1==b[y].t){
                for(int j=0;j<b[y].p&&!xl.empty();j++){
                    ans[t++]=xl.top().id;
                    xl.pop();
                }
                y++;
            }
        }
        while(!xl.empty()){
            ans[t++]=xl.top().id;
            xl.pop();
        }
        for(int i=0;i<q;i++){
            int n;
            scanf("%d",&n);
            printf(i==q-1?"%s\n":"%s ",a[ans
].name);
        }
    }
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: