程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> 關於C >> HDU5437 Alisha’s Party(優先隊列+模擬)

HDU5437 Alisha’s Party(優先隊列+模擬)

編輯:關於C

Source 2015 ACM/ICPC Asia Regional Changchun Online

題意:有k個人帶著價值vi的禮物來,開m次門,每次在有t個人來的時候開門放進來p個人,所有人都來了之後再開一次門把剩下的人都放進來,每次帶禮物價值高的人先進,價值相同先來先進,q次詢問,詢問第n個進來的人的名字。
分析:優先隊列+模擬就可以了,只是注意m可以為0。
#include 
#include 
#include 
#include 
#include 
#include
#include 
#include 
#include 
#include 
using namespace std;
const double eps = 1e-6;
const double pi = acos(-1.0);
const int INF = 0x3f3f3f3f;
const int MOD = 1000000007;
#define ll long long
#define CL(a,b) memset(a,b,sizeof(a))
#define lson (i<<1)
#define rson ((i<<1)|1)
#define MAXN 150010

struct node
{
    int id,v;
    char name[220];
    bool operator < (const node &tmp) const
    {
        if(v == tmp.v) return id < tmp.id;
        return v > tmp.v;
    }
}p[MAXN];

struct opendoor
{
    int a,b;
    bool operator < (const opendoor &tmp) const
    {
        return a < tmp.a;
    }
}od[MAXN];

set s;
int query[110];

int main()
{
    int T,n,m,q;
    scanf("%d",&T);
    while(T--)
    {
        s.clear();
        scanf("%d%d%d",&n,&m,&q);
        for(int i=1; i<=n; i++)
        {
            scanf("%s %d",p[i].name, &p[i].v);
            p[i].id = i;
        }
        for(int i=0; i ans;
        int cnt = 0;
        for(int i=1; i<=n&&ans.size()id);
                    s.erase(s.begin());
                }
                cnt++;
            }
        }
        while(!s.empty() && ans.size()id);
            s.erase(s.begin());
        }
        for(int i=0; i


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved