牛客网--牛牛找工作
题目描述
为了找到自己满意的工作,牛牛收集了每种工作的难度和报酬。牛牛选工作的标准是在难度不超过自身能力值的情况下,牛牛选择报酬最高的工作。在牛牛选定了自己的工作后,牛牛的小伙伴们来找牛牛帮忙选工作,牛牛依然使用自己的标准来帮助小伙伴们。牛牛的小伙伴太多了,于是他只好把这个任务交给了你。
输入描述:
每个输入包含一个测试用例。 每个测试用例的第一行包含两个正整数,分别表示工作的数量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
一开始看到这个题的思路是按照工作酬金给工作排序,之后通过循环,寻找每个人能力范围之内酬金最高的工作,后来发现这样时间复杂度太高,通过率是80%
优化思路是:不仅给各项工作按酬金排序,同时按照每个人的能力给小伙伴排序,如果这项工作连能力高的小伙伴都无法胜任,那能力低的小伙伴又怎么会被聘用呢?因此之前能力高的小伙伴无法胜任的工作,排在后面的小伙伴自然不用再看。
将每个人小伙伴可以得到的酬金分配给他们之后,再恢复小伙伴一开始的次序就好(即输入时的次序)
代码:
#include<stdio.h>
#include<iostream>
#include <algorithm>
using namespace std;
typedef struct Stu1
{
int a; //a表示该项工作的难度
int b; //b表示该项工作的酬金
}Stu;
typedef struct Person1
{
int No; //No是为了记录小伙伴一开始的次序,便于之后恢复次序
int Ability; //Ability表示小伙伴的能力
}Person;
bool cmp1(Stu x,Stu y)
{
return x.b > y.b;
}
bool cmp2(Person x,Person y)
{
return x.Ability > y.Ability;
}
bool cmp3(Person x,Person y)
{
return x.No < y.No;
}
int main()
{
int N,M,i,j;
int flag;
scanf("%d%d",&N,&M);
Stu stu[N],t;
Person person[M]; //小伙伴
for(i=0;i<N;i++)
{
scanf("%d%d",&stu[i].a,&stu[i].b);
}
for(i=0;i<M;i++)
{
scanf("%d",&person[i].Ability);
person[i].No=i;
}
sort(stu,stu+N,cmp1);
sort(person,person+M,cmp2);
j=0;
for(i=0;i<M;i++)
{
flag =0;
for(;j<N;) // j++未放在这里,就是为了优化程序,让一些没必要的工作不再循环,降低时间复杂度
{
if(stu[j].a<=person[i].Ability)
{
flag=1;
person[i].Ability=stu[j].b;
break;
}
j++;
}
if(flag==0)
{
person[i].Ability=0;
}
}
sort(person,person+M,cmp3); //恢复小伙伴之前的次序
for(i=0;i<M;i++)
{
printf("%d\n",person[i].Ability);
}
}
牛客网--牛牛找工作相关推荐
- 牛客网——牛牛的通勤
帮朋友写个题解 目录 前言 一.牛牛的通勤 描述 输入描述: 输出描述: 总结 前言 最后一场雨停歇之后,我出发了.空气因为我的目光而发亮.秘密小径也露出了轮廓.树林静静地等候--他们听说过我和你的约 ...
- 牛客网--牛牛的闹钟
牛牛总是睡过头,所以他定了很多闹钟,只有在闹钟响的时候他才会醒过来并且决定起不起床.从他起床算起他需要X分钟到达教室,上课时间为当天的A时B分,请问他最晚可以什么时间起床 输入描述: 每个输入包含一个 ...
- 牛客网牛牛换瓷砖的编程题
牛牛喜欢彩色的东西,尤其是彩色的瓷砖.牛牛的房间内铺有L块正方形瓷砖.每块砖的颜色有四种可能:红.绿.蓝.黄.给定一个字符串S, 如果S的第i个字符是'R', 'G', 'B'或'Y',那么第i块瓷砖 ...
- 牛客网 牛牛数括号(DP)
题目连接 题意 题干已经说的很清楚 给你两个括号序列,不保证合法,求有多少种不同的方法可以将两个括号序列合并成一个合法的括号序列 合并的时候不能改变各自序列原先的顺序 思路 dp[i][j] 表示s1 ...
- 牛客网:牛牛送冰淇淋
链接:https://ac.nowcoder.com/acm/contest/6630/C 来源:牛客网 牛牛公司老板让牛牛负责m个冰激凌的运输.运输车的冷库只够装n个冰激凌,一次运输需要t分钟,返回 ...
- codeforces(牛客网dp专题,排序)
链接:https://ac.nowcoder.com/acm/problem/21314 来源:牛客网 牛牛正在打一场CF 比赛时间为T分钟,有N道题,可以在比赛时间内的任意时间提交代码 第i道题的分 ...
- 找工作、备考、面试刷题网站推荐(牛客网、力扣、计蒜客、hihocoder、七月在线)以及acm竞赛oj
不管是找工作笔试面试白板试进大厂,还是研究生参加初试复试,数据结构和算法都是都是重中之重,刷题就很必要,来拿走自己的offer 吧! 一.offer刷题推荐 1.牛客网 链接:牛客网 - 找工作神器| ...
- 牛客网:牛牛玩平板(c++)
链接:牛牛玩平板 来源:牛客网 题目描述 牛牛和牛妹喜欢玩平板游戏,游戏一开始屏幕上会出现很多个图形,玩家在每一轮可以合并两个图形,当只有一个图形的时候游戏结束,每个图形都有一个大小,合并完成后的图形 ...
- 牛牛爱奇数 来源:牛客网
题目 链接:https://ac.nowcoder.com/acm/contest/28886/1016 来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K, ...
最新文章
- nlp文本数据增强_如何使用Texthero为您的NLP项目准备基于文本的数据集
- Linux shell/makefile/gic/python指令速查-inprocess
- 有哪些命令行工具堪称神器?
- Quiz 92 - twisted
- [css] 你是怎样对css文件进行压缩合并的?
- 程序员的灯下黑:重知识轻技术(转)
- deepsort报错 No module named ‘sklearn.utils.linear_assignment_‘ 问题解决
- Atitit.计算机图形图像图片处理原理与概论attilax总结
- java实现身份证识别
- 用计算机软件截取声音片段,音频提取剪辑器
- tampermonkey油猴实现自动定时刷新页面,刷访问量
- 学计算机要有什么基础,学计算机需要什么基础
- 用python做youtube自动化下载器 代码
- 《近匠》专访启明星辰安全研究中心副总监侯浩俊——物联网安全攻防的“线上幽灵”...
- java freemarker导出word 带图片,文件导出后图片无法使用office正常打开
- 论所谓“适合自己的方法”
- 厦门考计算机竞赛保送北大清华名单,五大学科竞赛获奖名单公布 厦门两名学生保送清华北大...
- 蔚来事故背后真相:Pilot只是舒适性功能,NOP仅是公开测试版本
- dns电视机服务器未响应如何处理,dns电脑服务器未响应如何处理?
- linux命令大全(完善中)
热门文章
- canvas 判断哪个元素被点击_监听 Canvas 内部元素点击事件的三种方法
- 写一个函数取出php,写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名...
- python中的异步与同步
- 魔兽世界转服务器显示完成,魔兽世界怀旧服:TAQ变简单了,为什么还是出现了AFK大潮?...
- DIN+DIEN,机器学习唯一指定涨点技Attention
- 薅羊毛 Colab使用外部数据的7种方法!
- Jarvis:一个值得关注的多模态端到端人机对话框架,针对所有行业适配
- 算法工程师思维导图—数据结构与算法
- 史上最简单的决策树模型讲解
- Android Hook技术防范漫谈