某公司部门需要派遣员工去国外做项目。
现在,代号为 x 的国家和代号为 y 的国家分别需要 cntx 名和 cnty 名员工。
部门每个员工有一个员工号(1,2,3,…),工号连续,从1开始。
部长派遣员工的规则:
问题:
找到最小的 k,使得可以将编号在 [1, k] 中的员工分配给 x 国和 y 国,且满足 x 国和 y 国的需求。
四个整数 x,y,cntx,cnty。
满足条件的最小的k
2 3 3 1
5
输入说明:
2 表示国家代号2
3 表示国家代号3
3 表示国家2需要3个人
1 表示国家3需要1个人
#include
using namespace std;
// 计算最小的 k,使得可以将编号在 [1, k] 中的员工分配给 x 国和 y 国,且满足 x 国和 y 国的需求
int findMinimumK(int x, int y, int cntx, int cnty) {
int k = cntx+cnty; //k取两者需要人数之和
if(k=cnty) //不满足x的人去y国 且已经满足y的人数
{
cnty=0;//y已经满足了 不需要再考虑(这一步非必要)
if(k-k/x>=cntx) //是否满足另一要求
return k;
}
if(k/y >=cntx)
{
cntx = 0;
if(k-k/y>=cnty)
return k;
}
k++;
}
}
int main() {
int x, y, cntx, cnty;
cin >> x >> y >> cntx >> cnty;
int k = findMinimumK(x, y, cntx, cnty);
cout << k << endl;
return 0;
}