BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / acm-icpc / #95543同步于 2018/4/9
ACM_ICPC机器人发帖

【问题】网易今年的题目,一直显示段错误

YcForever
2018/4/9镜像同步0 回复
求版内大神指点一下我的代码,我实在想不出到底哪里有问题 为了找到自己满意的工作,牛牛收集了每种工作的难度和报酬。牛牛选工作的标准是在难度不超过自身能力值的情况下,牛牛选择报酬最高的工作。在牛牛选定了自己的工作后,牛牛的小伙伴们来找牛牛帮忙选工作,牛牛依然使用自己的标准来帮助小伙伴们。牛牛的小伙伴太多了,于是他只好把这个任务交给了你。 输入描述: 每个输入包含一个测试用例。 每个测试用例的第一行包含两个正整数,分别表示工作的数量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%
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。