AOJ-problem-850

                                                                                                                 电缆公司的烦恼

Description

某地的居民决定举办一场程序比赛.评委会保证要组织一次最公正的比赛.它将选手的电脑以"星"形的结构连接并连到一个中心计算机.组织者决定将所有电脑以同样的距离连到该中心计算机上.组织者要求电缆公司提供一定量的等长的电缆,并希望电缆越长越好从而使选手之间的距离尽可能远.电缆公司的老板知道他的电缆长度精确到厘米,而且他能以厘米为单位切割电缆.但是这次他不知道所需的电缆的长度.郁闷的老板找到你,希望你能提供一个程序可以算出为达到所需求数量,这些电缆最多能被切成多长.



Input
第一行N,K表示公司里的电缆数和所需的电缆数.
接下来N行为没跟电缆的长度(1米到100千米之间),精确到厘米(小数点后2位)


Output
一个实数(表示最长的满足要求的电缆长度)

思路:
写这题的时候才发现只要const一个变量为常数,就可以开一个这么大的数组。
递归,二分,最长电缆长度范围是【0,max】,在该区间内递归不断改变左值与右值直到左值+1=右值或左值等于右值,然后取左值(较小数)。
#include <cstdio>
const int length=100000+10;
int a[length],n,m;
void digui(int max)
{
    int L=0,R=max+1,mid;
    int ans=0;
    while(L+1<R){
        ans=0;
        mid=(L+R)/2;
        for(int i=0;i<n;i++)
            ans+=a[i]/mid;           //当前电缆数
        if(ans<m)R=mid;
        else L=mid;
    }
    printf("%.2f",L/100.00);
}
int main()
{
    int max=0;
    scanf("%d%d",&n,&m);
    double t;
    for(int i=0;i<n;i++){
        scanf("%lf",&t);
        a[i]=t*100;                   //浮点型变整形
        if(max<a[i])
           max=a[i];
    }
    digui(max);
	getchar();
	getchar();
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值