求助
  • 板块学术版
  • 楼主SeeseaWY
  • 当前回复1
  • 已保存回复1
  • 发布时间2021/10/24 15:19
  • 上次更新2023/11/4 02:25:34
查看原帖
求助
359985
SeeseaWY楼主2021/10/24 15:19
题目描述
有人将一个大盒玻璃球捐赠给一所幼儿园。玻璃球共有M种不同的颜色。老师需要给N个孩子分玻璃球。如果有些孩子没有得到任何玻璃球,这是可以接受的。然而,没有一个孩子想要不同颜色的玻璃球,换句话说,一个孩子需要的所有玻璃球都是一样的颜色。
老师也知道,如果一个孩子有太多的玻璃球,其他孩子会嫉妒。我们把一个孩子的玻璃球的最大数量定义为嫉妒等级。帮助老师划分玻璃球,以减少嫉妒等级。

例如,如果箱子包含4个红色玻璃球(RRRR)和7个蓝色玻璃球(BBBBBBB),我们必须在5个孩子之间进行划分,我们可以通过以下方式划分玻璃球来达到嫉妒等级3:RR,RR, BB,BB,BBB。 这是可实现的最低嫉妒等级。


输入
第一行输入包含两个正整数,N(1≤N≤10^9),孩子数,M(1≤M≤300000,M≤N),玻璃球不同颜色的数目。
以下M行中的每一行一个正整数K(1<=K<=10^9),表示这种颜色的玻璃球数量
输出
一行一个整数,表示最低可能的嫉妒等级。
样例输入 Copy
【输入样例1】
5 2
7
4
【输入样例2】
7 5
7
1
7
4
4
样例输出 Copy
【输出样例1】
3
【输出样例2】
4
#include<bits/stdc++.h>
using namespace std;
long long m,n,ans,mid,a[300005];
bool check(int k) {
	int sum = 0;
	for(int i = 1; i <= m; i++) {
		sum += a[i]/k;
		if(a[i]%k>0) sum++;
	}
	return sum <= n;
}
int main() {
	cin>>m>>n;
	for(int i=1; i<=n; i++) {
		cin>>a[i];
	}
	long long l=1,r=1e9;
	while(l<=r) {
		mid=(l+r)>>1;
		if(!check(mid)) {
			ans=mid;
			l=mid+1;
		} else {
			r=mid-1;
		}
	}
	cout<<ans;
}

哪位大佬能帮我看看这道题

2021/10/24 15:19
加载中...