为了找到自己满意的工作,牛牛收集了每种工作的难度和报酬。牛牛选工作的标准是在难度不超过自身能力值的情况下,牛牛选择报酬最高的工作。在牛牛选定了自己的工作后,牛牛的小伙伴们来找牛牛帮忙选工作,牛牛依然使用自己的标准来帮助小伙伴们。牛牛的小伙伴太多了,于是他只好把这个任务交给了你。
#include<iostream>
#include<vector>
#include<algorithm>
#include<map>
using namespace std;
/*
利用map容器来做。
1.创建map容器Job存储难度和薪酬,前者为key,后者为value.由于map默认是根据key自动升序排列的,所以就不用再特地写sort函数了
2.Job按照从小到大排列好后,输入员工能力,并将员工能力用Insert插入到Job中,能力为key,默认value为0.
map用insert方法插入时不能插入已有关键字的数据。所以若有与Job中难度匹配的能力,其报酬不变。若没有与Job中难度匹配的能力,其报酬默认为0.
3.更新Job中能力与报酬的匹配情况,使得能力范围之内的报酬最大。
4.根据员工能力检索Job,输出对应报酬值
*/
int main()
{
int N, M;
map<int, int> Job;
while (cin >> N >> M)
{
int a, b;
//1.创建map容器Job存储难度和薪酬,前者为key,后者为value.
for (int i = 0; i < N; i++)
{
cin >> a >> b;
map<int, int>::iterator it = Job.find(a);
//此处用"array方法"插入而不用Insert是因为若出现重复key前者会覆盖而后者不会
//判断难度为a的是否已经插入了,若没有,直接插入,若出现了,比较大小,保留薪资大的那一个
if (it == Job.end())
Job[a] = b;
//Job.insert(pair(int,int)(a,b));
else
{
Job[a] = max(it->second, b);
}
}
//2.Job按照从小到大排列好后,输入员工能力,并将员工能力用Insert插入到Job中,能力为key,默认value为0
vector<int> ability(M);
for (int i = 0; i < M; i++)
{
cin >> ability[i];
//若对应难度已经存在在Job中,插入失败,若对应难度不存在,插入成功,且value置为0;
Job.insert(pair<int, int>(ability[i], 0));
}
//3.更新Job中能力与报酬的匹配情况,使得能力范围之内的报酬最大。
map<int, int>::iterator it = Job.begin();
int maxP = 0;
while (it!=Job.end())
{
if (it->second < maxP)
it->second = maxP;
else
maxP = it->second;
it++;
}
//4.根据员工能力检索Job,输出对应报酬值
for (int i = 0; i < M; i++)
{
cout << Job[ability[i]] << endl;
}
}
return 0;
}
京公网安备 11010502036488号