牛牛找工作(2019校招)

题目描述

为了找到自己满意的工作,牛牛收集了每种工作的难度和报酬。牛牛选工作的标准是在难度不超过自身能力值的情况下,牛牛选择报酬最高的工作。在牛牛选定了自己的工作后,牛牛的小伙伴们来找牛牛帮忙选工作,牛牛依然使用自己的标准来帮助小伙伴们。牛牛的小伙伴太多了,于是他只好把这个任务交给了你。

输入描述:

每个输入包含一个测试用例。
每个测试用例的第一行包含两个正整数,分别表示工作的数量N(N<=100000)和小伙伴的数量M(M<=100000)。
接下来的N行每行包含两个正整数,分别表示该项工作的难度Di(Di<=1000000000)和报酬Pi(Pi<=1000000000)。
接下来的一行包含M个正整数,分别表示M个小伙伴的能力值Ai(Ai<=1000000000)。
保证不存在两项工作的报酬相同。

输出描述:

对于每个小伙伴,在单独的一行输出一个正整数表示他能得到的最高报酬。一个工作可以被多个人选择。
示例1

输入

复制
3 3 
1 100 
10 1000 
1000000000 1001 
9 10 1000000000

输出

复制
100 
1000 
1001

AC代码:
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 
 4 #define N 100001 + 10
 5 
 6 struct job 
 7 {
 8     int difficulty; // 难度
 9     int salary; // 报酬
10 } jb[N];
11 struct person
12 {
13     int ability; // 能力
14     int i; // 对应编号
15     int salary = 0; // 报酬
16 } pesn[N];
17 
18 bool cmp(job jb1, job jb2) // 根据难度从小到大排序
19 {
20     return jb1.difficulty < jb2.difficulty;
21 }
22 bool cmp1(person ps1, person ps2) // 根据能力从小到大排序
23 {
24     return ps1.ability < ps2.ability;
25 }
26 bool cmp2(person ps1, person ps2) // 根据编号从小到大排序
27 {
28     return ps1.i < ps2.i;
29 }
30 int main()
31 {
32     int n, m;
33     while (scanf("%d%d", &n, &m) != EOF)
34     {
35         for (int i = 0; i < n; i++)
36             cin >> jb[i].difficulty >> jb[i].salary; 
37         sort(jb, jb + n, cmp);
38         for (int i = 0; i < m; i++)
39         {
40             pesn[i].i = i;
41             cin >> pesn[i].ability;
42         }
43         sort(pesn, pesn + m, cmp1);
44         // maxmoney中存放到j的最大值
45         int j = 0;
46         int maxmoney = 0;
47         for (int i = 0; i < m; i++)
48         {
49             while (j < n)
50             {
51                 if (jb[j].difficulty > pesn[i].ability)
52                     break;
53                 maxmoney = max(maxmoney, jb[j].salary);
54                 j++;
55             }
56             pesn[i].salary = maxmoney;
57         }
58         sort(pesn, pesn + m, cmp2);
59         for (int i = 0; i < m; i++)
60             cout << pesn[i].salary << endl;
61     }
62     return 0;
63 }
View Code

猜你喜欢

转载自www.cnblogs.com/sqdtss/p/12552793.html