题目描述
计划送一些项链给他的朋友们。他购买了 种珍珠,每种珍珠都有特定的颜色。
他要制作的项链都是 完美的,也就是每条项链都是恰好由 种珍珠组成的。
想知道他最多能送出多少条项链。给定每种珍珠的数目,你要回答的是 最多可以制作多少条 完美项链。
题目解析
二分答案
如果珍珠数最大前 种不够组成当前的 串,就从其他珍珠里面借。如果能凑齐 种珍珠每种数量为 的就可以了。
代码
#include<bits/stdc++.h>
#define LL long long
using namespace std;
LL n,m,t,ans;
LL a[1005],b[1005];
bool check(LL x)
{
LL sum=0;
for(int i=1;i<=n-m;i++)
sum+=a[i];
for(int i=n-m+1;i<=n;i++)
if(a[i]<x)
{
sum-=x-a[i];
if(sum<0) return false;
}
return true;
}
int main()
{
scanf("%d",&n);
while(n!=0)
{
for(int i=1;i<=n;i++)
scanf("%d",&a[i]),t+=a[i];
scanf("%d",&m);
sort(a+1,a+1+n);
ans=0;
LL l=1,r=t/m,mid;
while(l<=r)
{
mid=(l+r)/2;
if(check(mid)) l=mid+1,ans=mid;
else r=mid-1;
}
printf("%d\n",r);
scanf("%d",&n);
}
}