返回信息流求版内大神指点一下我的代码,我实在想不出到底哪里有问题
为了找到自己满意的工作,牛牛收集了每种工作的难度和报酬。牛牛选工作的标准是在难度不超过自身能力值的情况下,牛牛选择报酬最高的工作。在牛牛选定了自己的工作后,牛牛的小伙伴们来找牛牛帮忙选工作,牛牛依然使用自己的标准来帮助小伙伴们。牛牛的小伙伴太多了,于是他只好把这个任务交给了你。
输入描述:
每个输入包含一个测试用例。
每个测试用例的第一行包含两个正整数,分别表示工作的数量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
我的代码
```
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct workst{
int need, pay;
workst():need(0), pay(0){}
workst(int a): need(a), pay(0){}
bool operator<(const workst &a) const{
return this -> need < a.need;
}
};
int main() {
int N, M;
cin >>N >> M;
vector<workst> job(N);
vector<int> level(M);
for(int i = 0; i < N; ++i) {
cin >> job[i].need >> job[i].pay;
}
for(int i = 0; i < M; ++i)
cin >> level[i];
sort(job.begin(), job.end());//给输入工作按照所需能力之从小到大排序
for(int i = 0; i < M; ++i) {
workst man(level[i]);
auto it = upper_bound(job.begin(), job.end(), man);//找到第一个做不了的工作
if(it == job.begin()) cout << 0;
vector<workst> temp(job.begin(), it);
//按照收益从大到小排序
sort(temp.begin(), temp.end(), [](workst &job1, workst &job2){return job1.pay > job2.pay;});
cout << temp[0].pay << endl;
}
}
```
结果段错误:您的程序发生段错误,可能是数组越界,堆栈溢出(比如,递归调用层数太多)等情况引起
case通过率为20.00%
这是一条镜像帖。来源:北邮人论坛 / acm-icpc / #95543同步于 2018/4/9
ACM_ICPC机器人发帖
【问题】网易今年的题目,一直显示段错误
YcForever
2018/4/9镜像同步0 回复
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。