题目:有n种不同口味的糖果,第i种糖果的数量为a[i],现在需要把糖果分给m个人。分给每个人糖果的数量必须是相等的,并且每个人只能选择一种糖果。也就是说,可以把一种糖果分给多个人,但是一个人的糖果不能有多种。请问每个人最多能分到几个糖果?
示例
输入: n=3, m=3, a=[2,3,7]
输出: 3
解析: 有3个人,3种糖果分别有2、3、7个。每个人最多分到3个糖果。
#include<iostream>
using namespace std;
int n,m;
int getCnt(int a[],int mid){//每人mid个糖果,能分的人数
if(mid==0) return n;
int cnt=0;
for(int i=0;i<n;i++){
cnt+=a[i]/mid;
}
return cnt;
}
int main(){
cin>>n>>m;
int a[n];
int left=0,right=-1,mid;
for(int i=0;i<n;i++){
cin>>a[i];
right=max(right,a[i]);
}
while(left<right){
mid=(left+right)>>1;
int cnt=getCnt(a,mid);
if(cnt<m){
right=mid-1;
}else{
left=mid;
if(left+1==right){
if(getCnt(a,right)>=m) cout<<right<<endl;
else cout<<left<<endl;
return 0;
}
}
}
cout<<left<<endl;
return 0;
}