Distributing Ballot Boxes

Today, besides SWERC'11, another important event is taking place in Spain which rivals it in importance: General Elections. Every single resident of the country aged 18 or over is asked to vote in order to choose representatives for the Congress of Deputies and the Senate. You do not need to worry that all judges will suddenly run away from their supervising duties, as voting is not compulsory.
The administration has a number of ballot boxes, those used in past elections. Unfortunately, the person in charge of the distribution of boxes among cities was dismissed a few months ago due to nancial restraints. As a consequence, the assignment of boxes to cities and the lists of people that must vote in each of them is arguably not the best. Your task is to show how efficiently this task could have been done.
The only rule in the assignment of ballot boxes to cities is that every city must be assigned at least one box. Each person must vote in the box to which he/she has been previously assigned. Your goal is to obtain a distribution which minimizes the maximum number of people assigned to vote in one box.
In the first case of the sample input, two boxes go to the fi rst city and the rest to the second, and exactly 100,000 people are assigned to vote in each of the (huge!) boxes in the most efficient distribution. In the second case, 1,2,2 and 1 ballot boxes are assigned to the cities and 1,700 people from the third city will be called to vote in each of the two boxes of their village, making these boxes the most crowded of all in the optimal assignment.

Input

The fi rst line of each test case contains the integers N (1<=N<=500,000), the number of cities, and B(N<=B<=2,000,000), the number of ballot boxes. Each of the following N lines contains an integer a i,(1<=a i<=5,000,000), indicating the population of the i th city.
A single blank line will be included after each case. The last line of the input will contain -1 -1 and should not be processed.

Output

For each case, your program should output a single integer, the maximum number of people assigned to one box in the most efficient assignment.

Sample Input

2 7
200000
500000

4 6
120
2680
3400
200

-1 -1

Sample Output

100000
1700

这是一道二分法的题,可是对我来说是个0分题,之前看过那个二分法,但是考试的时候没处理好,上限和下限都选对了,但是自己没处理好二分的问题,再判断是否大于中间值的时候出了问题,导致考试的时候没做对。现在想起来,自己好傻。。。。

首先这道题你先选一个最大数据当作上线,然后从0当作下线,开始二分,用sum去记录,只要sum超过了上限就调整这个界限。

#include<stdio.h>
#include<math.h>
int s[550000];
int main()
{
    int n,m;
    while(~scanf("%d%d",&n,&m))
    {
        int  l=0,r=0;
        if(n==-1&&m==-1)
            break;
        for(int i=0;i<n;i++)
        {
            scanf("%d",&s[i]);
            if(s[i]>r)
                r=s[i];
        }
        while(l<r)
        {
            int mid=(r+l)/2;
            int sum=0;
            int flag=0;
            for(int i=0;i<n;i++)
            {
                sum=sum+ceil((s[i]+0.0)/mid);
                if(sum>m)
                {
                    flag=1;
                }
            }
            if(flag==1)
                l=mid+1;
            else
                r=mid;
        }
        printf("%d\n",r);
    }
    return 0;
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
耦合类型分布是指在系统中存在多个耦合类型,并且它们的分布不均匀。耦合类型是指一个系统中不同组件或模块之间的相互关系和依赖程度。 在软件开发中,耦合类型的分布对系统的可维护性和扩展性有着重要影响。如果系统中存在大量紧密耦合的组件,那么系统的可维护性将变得较差,因为对一个组件的修改可能会导致其他多个组件的功能异常或故障。 耦合类型分布还会影响系统的扩展性。如果系统中的组件之间的耦合较高,那么在引入新的功能或修改现有功能时会更加困难。因为需要同时修改多个相关的组件,这样会增加开发的复杂性和风险。 为了减少耦合类型分布,可以采取以下几种方法: 1. 模块化设计:将系统拆分成多个独立的模块,并定义清楚的接口和依赖关系。这样可以降低模块之间的耦合程度,提高系统的可维护性和扩展性。 2. 使用解耦工具或框架:有些编程语言或框架提供了一些解耦工具或机制,可以帮助开发者降低组件之间的耦合程度。例如,事件驱动编程模型可以将组件之间的直接依赖转化为事件的触发和响应,从而降低组件之间的耦合性。 3. 设计和代码复审:通过设计和代码复审可以发现和修复潜在的耦合问题。在团队开发中,进行设计和代码复审可以提升开发者的意识,减少耦合类型分布。 总而言之,耦合类型分布是指系统中不同组件之间的相互关系和依赖程度的分布。减少耦合类型分布可以提高系统的可维护性和扩展性,需要通过模块化设计、解耦工具和设计复审等方法来实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值