POj 2341 优先队列

#include
#include
#include
#include<string>
#include
#include

using namespace std;

int N;
int L;
int P;

//Poj2431 优先队列

struct stop {
    int dis;
    int ful;
    friend bool operator < (struct stop a,struct stop b) {
        return a.ful<b.ful;
    }

} S[10005];

bool cmp(stop s1, stop s2) {
    return s1.dis<s2.dis;
}

void solve() {
    scanf("%d",&N);
    for(int i=1; i<=N; i++) {
        scanf("%d%d",&S[i].dis,&S[i].ful);
    }
    scanf("%d%d",&L,&P);
    for(int i=1; i<=N; i++)
        S[i].dis = L-S[i].dis;
    sort(S+1,S+N+1,cmp); //把结构体从小到大根据dis排序

    /*for(int i=1;i<=N;i++){
        printf("\n%d %d\n",S[i].dis,S[i].ful);
    }*/

    priority_queue q; //根据ful排序
    /*for(int i=1;i<=N;i++)
        q.push(S[i]);
    for(int i=1;i<=N;i++){
        printf("%d %d\n",q.top().dis,q.top().ful);
        q.pop();
    }*/
    int pos = 0;
    int result = 0;
    S[N+1].dis = L;
    S[N+1].ful = 0;
    for(int i=1; i<=N+1; i++) {
        while(Pq.empty()) {
            stop temp = q.top();
            q.pop();
            P+=temp.ful;
            result++;
        }
        if(Ppos) {
            printf("-1\n");
            return;
        } else {
            P = P-(S[i].dis-pos);
            pos = S[i].dis;
            q.push(S[i]);
        }
    }
    printf("%d\n",result);
}

int main(void) {
    solve();
    return 0;
}

 

你可能感兴趣的:(POj 2341 优先队列)