网易2019:牛牛找工作
2018-03-30 16:57
267 查看
题目:
为了找到自己满意的工作,牛牛收集了每种工作的难度和报酬。牛牛选工作的标准是在难度不超过自身能力值的情况下,牛牛选择报酬最高的工作。在牛牛选定了自己的工作后,牛牛的小伙伴们来找牛牛帮忙选工作,牛牛依然使用自己的标准来帮助小伙伴们。牛牛的小伙伴太多了,于是他只好把这个任务交给了你。输入描述:
每个输入包含一个测试用例。
每个测试用例的第一行包含两个正整数,分别表示工作的数量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
输出例子1:
100 1000 1001
链接:
牛客网:https://www.nowcoder.com/test/9763997/summary
思路标签:
排序为每一个找匹配的最大解答:
work 和 student 可以作为结构体节点;work按照工作难度(di)从小到大排序,如果遇到相同的难度则按照薪资(pi)从大到小排序;
student按照学生的能力从小到大排序,同时给student增加id标识,以便后期正确输出;
为每个学生寻找符合其工作能力的最大薪资工作,因为工作和学生是排序好的,所以下一个学生的能力一定是大于上一个学生的能力,下一个工作的要求也是要高于上一个工作的要求,所以在计算下一个学生的时候,只需在上一个基础上继续进行,要么其和上一个同学相同,要么会得到要求更高,薪资更高的工作。
#include <iostream> #include <algorithm> #include <cmath> using namespace std; struct Work { int di; int pi; }work[101000]; struct Student { int ai; int id; }student[101000]; bool compWork(Work a, Work b) { if (a.di == b.di) return a.pi > b.pi; return a.di < b.di; } bool compStudent(Student a, Student b) { return a.ai < b.ai; } int n, m; int max_pi[101000]; int main() { cin >> n >> m; for (int i = 0; i < n; ++i) { scanf("%d %d", &work[i].di, &work[i].pi); } sort(work, work + n, compWork); for (int i = 0; i < n; ++i) max_pi[i] = 0; for (int i = 0; i < m; ++i) { scanf("%d", &student[i].ai); student[i].id = i; } sort(student, student + m, compStudent); int workNum = 0, ans = 0; for (int i = 0; i < m; ++i) { while (workNum < n && student[i].ai >= work[workNum].di) { ans = max(work[workNum].pi, ans); workNum++; } max_pi[student[i].id] = ans; } for (int i = 0; i < m; ++i) printf("%d\n", max_pi[i]); return 0; }
相关文章推荐
- 牛牛找工作--网易2019实习生招聘编程题
- 网易笔试编程题:牛牛找工作
- 2019网易实习生招聘笔试题解 矩形重叠+数对个数+找工作
- 网易实习2019编程题 牛牛背包
- 网易2019实习生招聘编程题(牛牛的闹钟)
- [牛客笔试题] 网易2018实习生题目 牛牛找工作
- 网易2018春招笔试编程题:牛牛找工作
- 网易前端笔试编程题——迷路的牛牛
- [编程题]牛牛找工作
- n个学生站成一排 网易面试题之每个学生有一个能力值 牛牛想从n个学生中选出k名学生 要求相邻学生编号不超过d使得这k个学生乘积最大
- 【bzoj2019】【找工作】【最短路】
- 网易面试题之给定一个 n 行 m 列的地牢,其中 '.' 表示可以通行的位置,'X' 表示不可通行的障碍,牛牛从 (x0 , y0 ) 位置出发,遍历这个地牢, * 和一般的游戏所不同的是,他每一步
- 2019网易实习笔试题——给字符串定义符号运算(上)
- 网易面试题之给定一个 n 行 m 列的地牢,其中 '.' 表示可以通行的位置,'X' 表示不可通行的障碍,牛牛从 (x0 , y0 ) 位置出发,遍历这个地牢, * 和一般的游戏所不同的是,他每一步
- 网易2019实习生笔试题整理
- 网易面试题之给定一个 n 行 m 列的地牢,其中 '.' 表示可以通行的位置,'X' 表示不可通行的障碍,牛牛从 (x0 , y0 ) 位置出发,遍历这个地牢, * 和一般的游戏所不同的是,他每一步
- 网易面试题之 牛牛拿到了一个藏宝图,顺着藏宝图的指示,牛牛发现了一个藏宝盒,藏宝盒上有一个机关,机关每次会显示两个字符串 s 和 t, * 根据古老的传说,牛牛需要每次都回答 t 是否是 s 的子序
- 网易面试题之给定一个 n 行 m 列的地牢,其中 '.' 表示可以通行的位置,'X' 表示不可通行的障碍,牛牛从 (x0 , y0 ) 位置出发,遍历这个地牢, * 和一般的游戏所不同的是,他每一步
- 网易面试题之 牛牛拿到了一个藏宝图,顺着藏宝图的指示,牛牛发现了一个藏宝盒,藏宝盒上有一个机关,机关每次会显示两个字符串 s 和 t, * 根据古老的传说,牛牛需要每次都回答 t 是否是 s 的子序
- 【面试总结】网易2019秋招一站式面试总结(等offer中……)