标签:
题目大意:有n个客户,去买一家商场,结算时候排队,每个顾客有一个等待时间,过了等待时间顾客就会不满,然后每个顾客又有一个结算时间,问说最多让几个顾客满意。
解题思路:先按照等待时间从小到大排列,然后遍历一遍,每次加上当前人的时间,如果时间超过了当前的等待时间,则减掉前面满意人当中结算时间最长的那个人的时间。
#include <cstdio>
#include <queue>
#include <algorithm>
using namespace std;
struct Order {
int q;
int d;
bool operator < (const Order& a) const {
return d < a.d;
}
} A[800010];
int main() {
int T;
scanf("%d", &T);
while (T--) {
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++)
scanf("%d%d", &A[i].q, &A[i].d);
sort(A, A + n);
int cur = 0;
priority_queue<int> que;
for (int i = 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());
if (T) puts("");
}
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
UVA - 1153 Keep the Customer Satisfied
标签:
原文地址:http://blog.csdn.net/kl28978113/article/details/46913169