The main topic: There are N customers, to buy a shopping mall, the settlement time line, each customer has a waiting time, after the waiting time customers will be dissatisfied, and then each customer has a settlement time, asked to let a few customer satisfaction.
Problem-solving ideas: first in accordance with the waiting time from small to large arrangement, and then traverse over, each time with the current person, if the time is more than the current waiting time, then reduce the former satisfaction of the person among the longest settlement time of the person.
#include <cstdio>#include <queue>#include <algorithm>using namespace STD;structOrder {intQintDBOOL operator< (Constorder& a)Const{returnD < A.D; }} a[800010];intMain () {intTscanf("%d", &t); while(t--) {intNscanf("%d", &n); for(inti =0; I < n; i++)scanf("%d%d", &A[I].Q, &A[I].D); Sort (A, a + N);intCur =0; priority_queue<int> que; for(inti =0; I < n; i++) {cur + = a[i].q; Que.push (A[I].Q);if(Cur > A[I].D) {cur-= que.top (); Que.pop (); } }printf("%ld\n", Que.size ());ifTputs(""); }return 0;}
Copyright NOTICE: This article for Bo Master original article, without Bo Master permission not reproduced.
UVA-1153 Keep the Customer satisfied