zoukankan      html  css  js  c++  java
  • HDU 5437 Alisha’s Party

    题意:有k个人带着价值vi的礼物来,开m次门,每次在有t个人来的时候开门放进来p个人,所有人都来了之后再开一次门把剩下的人都放进来,每次带礼物价值高的人先进,价值相同先来先进,q次询问,询问第n个进来的人的名字。

    解法:一道现场wa到死的模拟……拿set/map/priority_queue维护一下序列。赛后重写一遍……依旧wa到死……我只想说……

    m可以为0

    m可以为0

    m可以为0啊!

    orz……

    代码:

    #include<stdio.h>
    #include<iostream>
    #include<algorithm>
    #include<string>
    #include<string.h>
    #include<math.h>
    #include<limits.h>
    #include<time.h>
    #include<stdlib.h>
    #include<map>
    #include<queue>
    #include<set>
    #include<stack>
    #include<vector>
    #define LL long long
    
    using namespace std;
    
    struct node
    {
        int id, val;
        char name[205];
        bool operator < (const node &tmp) const
        {
            if(val == tmp.val) return id < tmp.id;
            return val > tmp.val;
        }
    }p[150005];
    struct opendoor
    {
        int a, b;
        bool operator < (const opendoor &tmp) const
        {
            return a < tmp.a;
        }
    }od[150005];
    set <node> s;
    int query[105];
    int main()
    {
        int T;
        while(~scanf("%d", &T))
        {
            while(T--)
            {
                s.clear();
                int n, m, q;
                scanf("%d%d%d", &n, &m, &q);
                for(int i = 1; i <= n; i++)
                {
                    scanf("%s%d", p[i].name, &p[i].val);
                    p[i].id = i;
                }
                for(int i = 0; i < m; i++)
                    scanf("%d%d", &od[i].a, &od[i].b);
                sort(od, od + m);
                int maxq;
                for(int i = 0; i < q; i++)
                {
                    scanf("%d", &query[i]);
                    maxq = max(maxq, query[i]);
                }
                vector <int> ans;
                int cnt = 0;
                for(int i = 1; i <= n && ans.size() < maxq; i++)
                {
                    s.insert(p[i]);
                    while(od[cnt].a == i && cnt < m)//要在这里判一下……因为m为0时就会使用上一个样例的输入……所以初始化一下也是可以的……
                    {
                        for(int j = 0; j < od[cnt].b && !s.empty() && ans.size() < maxq; j++)
                        {
                            ans.push_back(s.begin() -> id);
                            s.erase(s.begin());
                        }
                        cnt++;
                    }
                }
                while(!s.empty() && ans.size() < maxq)
                {
                    ans.push_back(s.begin() -> id);
                    s.erase(s.begin());
                }
                for(int i = 0; i < q; i++)
                {
                    if(i) printf(" ");
                    cout << p[ans[query[i] - 1]].name;
                }
                puts("");
            }
        }
        return 0;
    }
    

      

  • 相关阅读:
    Java求区间连续最大和的三种解法(含输出起始位置)
    Java批量操作和遍历文件程序收集
    FastJson序列化部分字段的方法
    Spring源码之一步步拓展实现spring-mybatis
    Spring源码之BeanFactoryPostProcessor的执行顺序
    Classpath entry points to a non-existent location:D:libjavajdk8jrelibextaccess-bridge-32.jar
    编译Spring源码省心小贴士
    (转)HttpServletResquest对象
    (转)ServletConfig与ServletContext
    Oracle复习(复习精简版v1.0)
  • 原文地址:https://www.cnblogs.com/Apro/p/4807471.html
Copyright © 2011-2022 走看看