员工派遣 - 华为OD统一考试(D卷)

员工派遣 - 华为OD统一考试(D卷)

OD统一考试(D卷)

分值: 200分

题解: Java / Python / C++

alt

题目描述

某公司部门需要派遣员工去国外做项目。

现在,代号为x的国家和代号为y的国家分别需要cntx名和cnty名员工。

部门每个员工有一个员工号(1,2,3.....),工号连续,从1开始。

部长派遣员工的规则:

  • 规则1、从[1, k] 中选择员工派遣出去
  • 规则2、编号为x的倍数的员工不能去x国,编号为y的倍数的员工不能去y国

问题:

找到最小的k,使得可以将编号在[1, k]中的员工分配给X国和y国,且满足x国和y国的需求

输入描述

四个整数 x,y, cntx,cnty。(2<=x<y<=30000; x和y一定是质数;)

输出描述

满足条件的最小的k

示例1

输入:
2 3 3 1

输出:
5

说明:
2 表示国家代号2
3 表示国家代号3
3 表示国家2需要3个人
1 表示国家3需要1个人

题解

这个问题可以归类为二分查找问题。目标是找到最小的 ( k ),使得员工的编号从1到 ( k ) 可以被分配到国家X和Y,并满足它们的需求。

解决思路:

  1. 实现一个 ok(k) 函数来检查是否可能将员工从1到 ( k ) 分配给国家X和Y。
  2. 使用二分查找来找到最小的有效 ( k )。
  3. 根据当前的 ( k ) 是否满足条件,调整搜索范围。

Java


import java.util.Scanner;
/**
 * @author code5bug
 */
public class EmployeeDistribution {
    static int x, y, cntx, cnty;

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        x = sc.nextInt();
        y = sc.nextInt();
        cntx = sc.nextInt();
        cnty = sc.nextInt();

        int left = 0;
        int right = Integer.MAX_VALUE;

        while (left + 1 < right) {
            int mid = (left + right) / 2;
            if (ok(mid)) {
                right = mid;
            } else {
                left = mid;
            }
        }
        System.out.println(right);
    }

    public static boolean ok(int k) {
        if (k < cntx + cnty) {
            return false;
        }

        // x 、 y 国家都不能分配的员工
        int com = k / (x * y);
        int mx = k / y - com; // 是y的倍数不是x的倍数的人数(可以分配给x国家)
        int my = k / x - com; // 是x的倍数不是y的倍数的人数(可以分配给y国家)

        // 满足x,y 国家的需求还缺少的人数
        int missing = Math.max(0, cntx - mx) + Math.max(0, cnty - my);
		
        // k - mx - my - com 表示既不是x的倍数也不是y的倍数的人数
        return k - mx - my - com >= missing;
    }
}

Python

x, y, cntx, cnty = map(int, input().split())

def ok(k: int) -> bool:
    """  是否可以将编号在[1, k]中的员工分配给X国和y国,且满足x国和y国的需求 """
    global x, y, cntx, cnty
    if k < cntx + cnty:
        return False
	
    # x 、 y 国家都不能分配的员工
    com = k // (x * y)
    # 是y的倍数不是x的倍数的人数(可以分配给x国家)
    # 是x的倍数不是y的倍数的人数(可以分配给y国家)
    mx, my = k // y - com, k // x - com
    
    # 满足x,y 国家的需求还缺少的人数
    missing = max(0, cntx - mx) + max(0, cnty - my)

    # k - mx - my - com 表示既不是x的倍数也不是y的倍数的人数
    return k - mx - my - com >= missing

left, right = 0, 10 ** 15
while left + 1 < right:
    mid = (left + right) // 2
    if ok(mid):
        right = mid
    else:
        left = mid
print(right)

C++

#include <bits/stdc++.h>
using namespace std;

int x, y, cntx, cnty;

// 是否可以将编号在[1, k]中的员工分配给X国和y国,且满足x国和y国的需求
bool ok(int k)
{
    if (k < cntx + cnty) {
        return false;
    }

    int com = k / (x * y);   // x 、 y 国家都不能分配的员工
    int mx  = k / y - com;   // 是y的倍数不是x的倍数的人数(可以分配给x国家)
    int my  = k / x - com;   // 是x的倍数不是y的倍数的人数(可以分配给y国家)

    int missing = max(0, cntx - mx) + max(0, cnty - my);

    return k - mx - my - com >= missing;
}

int main()
{
    cin >> x >> y >> cntx >> cnty;

    long long left  = 0;
    long long right = 1e15;

    while (left + 1 < right) {
        long mid = (left + right) / 2;
        if (ok(mid)) {
            right = mid;
        } else {
            left = mid;
        }
    }
    cout << right;

    return 0;
}

希望这个专栏不仅能帮您成功通过华为机试,还能让您熟练掌握算法。

🙏整理题解不易, 如果有帮助到您,请给点个赞 ‍❤️‍ 和收藏 ⭐,让更多的人看到。🙏🙏🙏

#面经##春招##秋招##校招##华为#
全部评论

相关推荐

山东人&nbsp;一看山东的环境,目前山东还是以工业+制造业为主,互联网性质的企业也主要是外包+国企改制为主其次是牛客网关于山东互联网招聘帖子实在少之又少,为了2024年找工作的牛友还有以后想回山东的同学们,所以总结这个帖子,给广大想回山东的牛友一些建议.如果有问题可以私聊我也可以在下面留言,一、企业驻地济南1.浪潮,最好去浪潮信息2.华为(一个是运营商BG、一个是华为云使能部)3.中兴(属于运营技术支持中心,目前无技术岗位)4.海康威视山东业务中心5.宇视山东业务中心6.字节跳动运营中心(主要是内容管理、电商运营、推荐运营为主,无技术岗位)7.阿里巴巴口碑分部(只要社招,具体情况不清楚)8.浩鲸云科技9.中泰证券10.积成电子11.山东高速公路集团技术岗12.空天院、613特殊材料研究院(对学校有一定的要求)13.亚信、中创、中软等等一堆外包(对学校要求不高,只要会sql就行,主要服务于银行运营商)14.山大地纬15.中孚信息(只是了解做安全的,不如奇安信好)16.重汽相关计算机岗位(但是对学校和学历有一定的要求,从21年开始,如果你本科不太好,可能也受限)17.联通软件研究院(央企背景,但是工资确实。。)18.山东移动省公司、设计院、终端公司、中移在线19.中建工农交行、中信银行、招商银行、恒丰银行、民生银行、交通银行20.中国工业互联网研究院山东分院(国务院直属,党员优先)21.国家超级计算中心(主要是博士,极少岗位要硕士,一般要硕士的岗位就看他们去不去你们学校搞线下宣讲)22.中国科学院的新能源汽车的公司(应该是叫中国科学院先进院),新成立的23.国网山东省电力公司电力科学院(待遇不错,但我觉得晋升困难)24.中科院计算所泛在智能研究院25.博观智能二、企业驻地青岛1.海信的聚好看科技(18年海信成立的研发公司)2.海尔卡奥斯公司3.中车四方所,看清楚是签劳动合同还是劳务合同4.鼎信科技,具体业务面试的时候跟我说了,我忘记了,但是工资在青岛算是高的,加班很严重5.青岛银行6.一汽解放青岛分公司7.光大银行总行直属的青岛科技信息技术中心8.阿里巴巴本地生活,属于客户经理性质9.中电41所青岛分所10.字节跳动青岛运营中心三、企业驻地潍坊1.潍柴,与重汽一个老总,对学校极其挑剔,但是工资待遇在潍坊算是很高了2.歌尔,待遇在潍坊确实不错3.海化,央企编制,主做化学盐类4.潍坊银行四、企业驻地烟台1.烟台东方电子信息产业股份有限公司,应该属于国企改制企业2.南山集团3.字节跳动烟台运营中心4.招商银行烟台分行,感觉这个分行地位还挺高的,去各个985大学去招聘5.513研究所浪潮推荐指数:※※※浪潮就不用说了,济南最大的本地企业,需求量大,工资水准还算可以,但是有部分是做外包工作的,也有做云服务等等其他工作,建议能去浪潮信息就去浪潮信息,你懂得但是浪潮我个人觉得xx主义还是比较严重的,不是太喜欢这种感觉(因人而异吧)华为推荐指数:※※※※(华为对学校有一定的要求,只要是名单的学校一般都可以进入笔试,但是今年开始对本科学校也有了一定的限制)华为就不用多说了,工资应该在济南属于高薪阶层了,加班多那是肯定了,你拿这么高的工资,肯定也是要付出相对应的贡献,不然你也拿不到这个钱数,而且如果你是想打拼,并且想在济南生活的,可能华为还是不错的选择,目前分为了两大分支:一个是运营商BG,这个主要服务于各大运营商;一个是华为云,主要是智慧园区解决方案业务。目前华为应该在济南也是处于业务上升期,应该在逐步扩大,但是今年疫情原因,肯定有了一定的限制,但是我觉得发展会很好的。我个人还是觉得华为云的这个分支比较好,比较有发展前景,跟着运营商走,难免有种外包的感觉中兴推荐指数:※※无技术岗位,只有部分的技术支持,运营等岗位,主要依赖于运营商等大型央企国企。海康推荐指数:※※※※海康威视,安防老大,目前也在转型做大数据,是中央企业中国电子科技集团下设企业。山东业务中心成立比较晚,也是处于业务上升期,ps:华为和海康都属于外来企业,如果想要发展,肯定离不开政府的支持的,如果山东省想大力发展人工智能产业,那么未来肯定要做好两手抓工作:第一就是本地人工智能产业不断创新发展+第二引入大型互联网企业与本地产业形成明显的竞争力,促进本地互联网产业与本地相关服务的迅速发展。宇视科技推荐指数:※※相对于海康来说,宇视的分量就轻了很多,我觉得如果可以去海康,首选还是海康,毕竟平台大字节跳动推荐指数:※※※※※※济南、烟台、青岛都有字节跳动的运营中心,但是都没有技术岗位,主要是做内容管理和运营推广以及电商运营等等,一般比较适合于搞运营和文科一类的同学,门槛较低。字节的平台够大,虽然没有技术岗位,但是我觉得还是非常值得去的。阿里巴巴口碑分部推荐指数:---不了解,只进行社招浩鲸云科技推荐指数:※※也主要是外包性质的,在天眼查中发现是中兴和阿里巴巴共同成立的,主要是协助比如说中国移动完成政企业务平台等等,具体情况不是很了解,但是济南分部也是刚成立不久。中泰证券推荐指数:※※※※※原来是叫齐鲁证券还是什么证券,忘记了,也是招收计算机相关岗位,对学校要求比较高,工资也是可以的,15薪,待遇还是不错的,而且他的技术岗人数也是很多,以后的发展肯定不错积成电子推荐指数:※※不了解,只是听同学讲过山东高速公路集团推荐指数:※※招收人数较少,工资肯定不是很高,但是比较稳定,面试流程来说较为国企化空天院推荐指数:※※※※※给不给编制不好说,工资在济南算是不错,因为属于新成立的,而且我看今年(2020年12月份)山东省教育厅文件要成立一个以空天院为架构的大学,我觉得会发展的很好。但是我觉得可能博士发展会好很多,硕士可能很难往上晋升特殊材料研究所推荐指数:※※※军工所,主要是做预警机这一块的工作,具体的应该是保密的,女生进去主要是写专利,发专利,男生就不太清楚了,因为性质保密,不太好做评价外包公司推荐指数:----不建议去,我觉得应该学不了技术,个人见解,不喜勿喷重汽和潍柴推荐指数:※※※对学校要求很高,非985、211不要,很多技术不是那么好(相对于互联网来说),处于学习状态,如果你想稳定,可以考虑;如果你想上进,那么你。。。联通软件研究院推荐指数:※※※全国共设置了五个还是六个分院,工作量直接对标华为,但是工资对标不了华为,福利待遇也算中等水平。对学校要求也比较高,但是我觉得学习技术应该也算可以了移动推荐指数:※※※※※移动在省内算是三大运营商待遇最好的,虽然比不了华为海康,但是还是不错的,但是也是有加班现象,也是有指标的,如果你不想干,那么就只能那固定工资了。移动请看这个帖子---山东移动情况解析中国工业互联网研究院山东分院2020年刚刚成立的,属于国务院直属,要求里面就写着年龄和党员的限制,具体信息不明聚好看科技推荐指数:※海信集团下设互联网企业,为海信电器做服务的同时,也在涉猎自己的研发方向,18年刚刚成立,很多东西都在摸索奥斯卡公司推荐指数:※海尔集团下设互联网企业,与海信的聚好看科技性质差不多,但是吧,工资要比海尔低鼎信科技推荐指数:※※※在青岛算是比较大的研发公司,具体公司的背景他给我介绍了,我忘记了,但是吧,宣讲会那天想回山东青岛的都去了,那可是人山人海了,而且工资也很高,面试过程中问了我很多的专业问题,我觉得还是比较专业的,所以可以去试试,但是加班极其严重,应该跟华为有一拼。有想法的同学可以私信,巾裙。
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
01-09 02:55
点赞 评论 收藏
分享
评论
5
2
分享

创作者周榜

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