hdu5437(2015 장춘 인터넷 경기 A 문제)
한 파티가 있는데 n명이 온다. 모든 사람이 선물을 가지고 온다. 선물은 가치가 있다. 방의 크기가 제한되어 있기 때문에 그는 k시간을 선택해서 문을 열고 t시간에 p사람을 들어오게 한다. 다음에 q팀에서 묻는다. 각 팀에서 숫자ni가 있는데 너로 하여금 첫 번째로 들어온 사람이 누구인지 출력하게 한다.
아이디어:
우선 순위 대기열을 사용하고 우선 순위를 스스로 정의하면 됩니다. 왜냐하면 cin과scanf가 우리 TLE를 한 번 혼용하는 것이 교훈이기 때문입니다.
코드:
#include
#include
#include
#include
#include
#include
#include
using namespace std;
const int maxn = 150005;
struct PER
{
    string name;
    int pos;
    int x;
    bool operator < (const PER& rhs) const {
        if (rhs.x != x) {
            return rhs.x > x;
        }
        return rhs.pos < pos;
    }
}node[maxn];
struct E {
    int x, y;
}e[maxn];
bool cmp(E a, E b) {
    if(a.x != b.x) {
        return a.x < b.x;
    }
    return a.y < b.y;
}
priority_queue q;
string ans1[maxn];
char str[1000];
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int n,m,kk;
        scanf("%d%d%d",&n,&m,&kk);
        for(int i = 1; i <= n; i++) {
            scanf("%s%d",str,&node[i].x);
            node[i].name = str;
            node[i].pos = i;
        }
        for(int i = 1; i <= m; i++) {
            scanf("%d %d",&e[i].x, &e[i].y);
        }
        sort(e + 1, e + m + 1,cmp);
        while(!q.empty()) q.pop();
        int j = 1;
        int l = 1;
        for(int i = 1; i <= m; i++) {
            while(j <= e[i].x) {
                q.push(node[j]);
                j++;
            }
            //printf("%d %d
", e[i].x, e[i].y);
            for(int k = 1; k <= e[i].y;k++) {
                if(q.empty()) break;
                PER p1 = q.top(); q.pop();
                ans1[l++] = p1.name;
            //    cout << p1.name << " " << p1.x << endl;
            }
        }
        while(j <= n) {
            q.push(node[j]);
            j++;
        }
        while(!q.empty()) {
            PER p1 = q.top(); q.pop();
            ans1[l++] = p1.name;
        }
        for(int i = 1; i <= kk; i++) {
            int xx;
            scanf("%d",&xx);
            if(i == 1) printf("%s", ans1[xx].c_str());
            else printf(" %s", ans1[xx].c_str());
        }puts("");
    }
    return 0;
}
        이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Rails Turbolinks를 페이지 단위로 비활성화하는 방법원래 Turobolinks란? Turbolinks는 링크를 생성하는 요소인 a 요소의 클릭을 후크로 하고, 이동한 페이지를 Ajax에서 가져옵니다. 그 후, 취득 페이지의 데이터가 천이 전의 페이지와 동일한 것이 있...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.