任务

 

 

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 typedef pair<int, int> PII;
 5 const int N = 100010;
 6 int n, m;
 7 PII mchs[N], tasks[N];
 8 //存储机器,存储任务
 9 int main() {
10     while (cin >> n >> m) { //多组输入
11         for (int i = 0; i < n; i++) {
12             cin >> mchs[i].first >> mchs[i].second;
13         }
14         for (int i = 0; i < m; i++) {
15             cin >> tasks[i].first >> tasks[i].second;
16         }
17         sort(mchs, mchs + n); //从小到大排序
18         sort(tasks, tasks + m); //从小到大排序
19         multiset<int> ys; //存储所有y
20         /*
21             multiset是<set>库中一个非常有用的类型,
22             它可以看成一个序列,插入一个数,删除一个数都能够在O(logn)的时间内完成
23             而且能时刻保证序列中的数是有序的,而且序列中可以存在重复的数。
24         */
25         ll cnt = 0, res = 0;
26         //i枚举任务,j枚举机器
27         for (int i = m - 1, j = n - 1; i >= 0; i--) {
28             //每次把横坐标大于等于当前任务的机器都加进来
29             while (j >= 0 && mchs[j].first >= tasks[i].first) {
30                 ys.insert(mchs[j].second);
31                 j--;
32             }
33             multiset<int>::iterator it = ys.lower_bound(tasks[i].second);
34             if (it != ys.end()) {
35                 cnt++;
36                 res += 500 * tasks[i].first + 2 * tasks[i].second;
37                 ys.erase(it); //用掉了一个机器
38             }
39         }
40         cout << cnt << " " << res << endl;
41     }
42     return 0;
43 }
原文地址:https://www.cnblogs.com/fx1998/p/14033467.html