机智的我第一次就写的二分,天知道写代码无比慢 又对第一份代码无比有强迫症的我错一个思路会花多长时间扭过来。。
题意是
第一行给出珠子的种类数
第二行给出每种珠子的数目
第三行每条多少
所以说珠子的总数很容易算出来吧~所以说项链最多有多少条很容易算出来吧~
然后就开始二分了~
check()函数是判断条件,怎么判断呢~也就是每次出来一个mid值,就和之前用数组存下来的每颗珠子的给定数比较来决定是不是都选进去,选了以后发现少了再加,反之减
今天兴奋过度需要冷静。。
#include<stdio.h>
#include<string.h>
int n,m,per[1010];
int high;
int check(int mid)
{
int sum=0;
for(int i=0;i<n;i++)
{
if(per[i]<mid)sum+=per[i];
else sum+=mid;
}
if(sum>=mid*m)return 1;
else return 0;
}
int fen(int low,int high)
{
int mid;
mid=(low+high)/2;
if(low>high)
return mid;
if(check(mid))
fen(mid+1,high);
else fen(low,mid-1);
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
high=0;
if(n==0)break;
for(int i=0;i<n;i++)
{
scanf("%d",&per[i]);
high+=per[i];
}
scanf("%d",&m);
int mid=fen(0,high);
printf("%d\n",mid);
}
return 0;
}