华为OD统一考试 - 员工派遣

题目描述

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

现在,代号为 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 一定是质数
  • 1 ≤ cntx, cnty < 10^9
  • cntx + cnty ≤ 10^9

输出描述

满足条件的最小的k

用例

输入

2 3 3 1

输出

5

说明

输入说明:

2 表示国家代号2

3 表示国家代号3

3 表示国家2需要3个人

1 表示国家3需要1个人

题目解析

首先,我们需要搞清楚一个数学问题,那么就是 1~k 范围内,x的倍数的数量该如何求解。

比如 1~10 范围内,2的倍数有:2,4,6,8,10,共计5个

比如 1~20 范围内,3的倍数有:3,6,9,12,15,18,共计6个

可以发现1~k范围内x的倍数的个数 = k // x,其中//表示整除。

证明也很简单,大家可以自行验证。

因此,我们可以得出1~k范围内:

  • x的倍数个数有:k // x 个,假设 A = k // x
  • y的倍数个数有:k // y 个,假设 B = k // y

同时,我们还需要关注 1~k 范围内:

  • x*y的倍数的个数有: k // (x*y) 个,假设  = C // (x*y)

即 1 ~ k 范围内:

  • x倍数且非y倍数的个数有:A - C 个
  • y倍数且非x倍数的个数有:B - C 个

我们可以让:

  • “x倍数且非y倍数” 的数去 y 国
  • "y倍数且非x倍数" 的数去 x 国

那么此时

  • x 国还差:max(0, cntx - (B-C)) 个
  • y 国还差:max(

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

2024华为OD机试卷题 文章被收录于专栏

本专栏给大家提供了华为2024最新华为OD 题目汇总。华为OD机试刷题记录机考算法题库,帮助你上岸华为。提供C++/Java、JavaScript、Python四种语言的解法。

全部评论

相关推荐

03-28 22:31
门头沟学院 Java
点赞 评论 收藏
分享
数学转码崽:一直给我推,投了又不理,理了又秒挂
点赞 评论 收藏
分享
佛系的本杰明反对画饼:个人看法,实习经历那段是败笔,可以删掉,它和你目标岗位没什么关系,没有用到什么专业技能,甚至会降低你项目经历内容的可信度。个人技能那里可以再多写一点,去boss直聘上看别人写的岗位要求,可以把你会的整合一下,比如熟悉常规的开关电源拓扑结构(BUCK、正激、反激、LLC等),熟悉常用的通信总线协议和通信接口,如UART,IIC,SPI等。简历首先是HR看的,HR大多不懂技术,会从简历里去找关键字,你没有那些关键字他可能就把你筛掉了,所以个人技能尽量针对着岗位描述写一下。还有电赛获佳绩,获奖了就写什么奖,没获奖就把获佳绩删了吧,要不会让人感觉夸大。
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务