种田佬的刷题笔记 之 牛牛找工作

牛牛找工作

https://www.nowcoder.com/practice/46e837a4ea9144f5ad2021658cb54c4d

1.首先把所有的工作存储起来.

2.我们得思考一下既然是所谓的找赚钱赚多而且能力比难度大的,不免需要排序.无非就是两个排序思路:难度排序,报酬排序

2.1难度排序,此刻然后找到一定比自己能力小的工作了,但是依然需要找难度小中钱最多的

2.2报酬排序,排序好报酬,找哪个工作难度是比我能力小的

3.根据上面两个排序我们其实都可以一一的实现

按照实现简单的报酬排序

1.排序好报酬,按照报酬多的排前面

2.之后我们暴力遍历就行,原因是:我们每次由于是从大到小排序报酬的,不再需要考虑钱的问题,只需要考虑难度的问题,那么遍历得到第一个难度比自己能力小的工作,自然就是我们最心仪的工作了(好真实,我感觉我找工作就是这感觉...)

3.这确实能写出来,但实际是超时的(牛客官方的题解也超时了( ̄_ ̄),但是他没说明,真是的...)

#include <algorithm>
#include <iostream>
#include <utility>
#include <vector>
using namespace std;

int main() {
    int N,M;
    cin>>N>>M;
    vector<pair<int,int>> v;
    for(int i=0;i<N;i++)
    {
        int di,pi;
        cin>>di>>pi;
        v.push_back({di,pi});
    }
    sort(v.begin(),v.end(),[&](auto x,auto y)->bool{
        return x.second>y.second;
    });

    for(int i=0;i<M;i++)
    {
        int ai;
        cin>>ai;
        for(int j=0;j<N;j++)
        {
            if(ai>=v[j].first)
            {
                cout<<v[j].second<<endl;
                break;
            }
            if(j==N-1) cout<<0<<endl;
        }
    }
    return 0;
}

实现难度排序

1.我们先对难度从简单到难来进行排序,但是此时还有问题,就是可能我们找到难度合适的,但是不一定是拿钱最多的(纯纯牛马)

2.为此,我们需要对其进行规划,也就是说:"如果我们能干难的,就一定能干简单的",定义一个当前工作报酬最大值用于记录遍历过程的最大报酬,那么对从小到大难度排序的进行遍历,如果"当前难度的报酬比遍历更新的要小(意思就是有更轻松但是钱更多的活),那么此时就需要把当前难度的报酬变成最大报酬(暗指虽然工作难但是钱少,之前看过比较轻松的公司有可以赚更多钱的) ; 当前难度下报酬更高,那么实时更新最大的报酬(活难,但是比之前简单的工作赚的钱都多)"

3.那么对每一个特定能力的朋友找工作,用到双指针,找到难度小于等于并且最接近自己能力的,那么此时的报酬就是"所有比自己能力小的工作中最大的报酬了"

#include <algorithm>
#include <iostream>
#include <utility>
#include <vector>
using namespace std;

int main() {
    int N,M;
    cin>>N>>M;
    vector<pair<int,int>> v;
    for(int i=0;i<N;i++)
    {
        int di,pi;
        cin>>di>>pi;
        v.push_back({di,pi});
    }
    sort(v.begin(),v.end(),[&](auto x,auto y)->bool{
        return x.first<y.first;
    });
    int max_pi=0;
    for(int i=0;i<N;i++)
    {
        if(max_pi<v[i].second)
            max_pi=v[i].second;
        else
            v[i].second=max_pi;
    }
    for(int i=0;i<M;i++)
    {
        int ai;
        cin>>ai;
        int left=0,right=N-1,mid=left+(right-left)/2;
        while(left<=right)
        {
            mid=left+(right-left)/2;
            if(ai<v[mid].first)
                right=mid-1;
            else
                left=mid+1;
        }
        if(right>=0) 
            cout<<v[right].second<<endl;
        else 
            cout<<0<<endl;
    }
    return 0;
}
全部评论

相关推荐

01-14 10:23
已编辑
湖南师范大学 计调
太久没更新,前几天看到一条评论,说“牛客就是当年那群做题区毕业了开始找工作还收不住那股味”的群体。字里行间透着居高临下的评判,不是,他该不会以为自己很幽默?很犀利吧?作为在牛客混了不算短日子的用户,我感到的不只是被冒犯,更是一种深刻的悲哀——这种以“松弛感”为名,对另一种生存策略的轻蔑,颇有一种自己考不上大学早早出来混社会,嘲笑考上大学的人是书呆子,然后大言不惭地说:死读书有什么用,人脉和资源才是硬道理。我不知道说这个话的人,手头究竟握着多少真正管用的人脉与资源,也不知道他这么傲慢地说出“那股味”的时候,是站在哪一个巨人的肩膀上,才能如此“松弛从容”地俯视众生,还能品评出别人身上“没收住”的余...
淬月星辉:这种评论把正常的努力扭曲成卷😂,说白了就是自己不努力,看着身边努力的人一个个都事业有成了,自己的心里开始不平衡了,就发这种酸言酸语。牛客可以说是我用过那么多平台里社区氛围最好的论坛了,用了大半年了,基本上没见过有人吵架的,都是在互帮互助提建议,帮忙看简历的,帮忙选offer的,帮忙指点学习路线的,分享工作经验和趣事的,我觉得这才是互联网该有的样子。
点赞 评论 收藏
分享
后端测试双料特工:这能忍住不骂?
找实习记录
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务