Distributing Ballot Boxes

本文探讨了一项挑战:如何高效地将有限数量的投票箱分配到不同规模的城市中,确保每个城市至少有一个投票箱的同时,尽量减少每个投票箱的最大投票人数。采用二分查找法来解决这一问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

题意:有n个城市b个信箱,下面的n行是每个城市的人口数量,问怎样分配这些信箱才能使每个信箱可用的人数最多,并且保证每个城市必须要有信箱。

思路:这道题用二分法,先用打擂台法找出城市的最大人口数置为maxx,然后让minn=0;num为二者之和的一半,然后for每个城市的人口数除以num得到那个城市需要的信箱数量。然后加起来如果最终的信箱数量过大,证明需要向右走了,反之向左走。知道while循环结束,输出maxx即可。代码如下:

#include<stdio.h>  //二分法
#include<math.h>
int s[550000];
int main()
{
    int a,b,sum,minn,maxx,num,flag;
    while(~scanf("%d %d",&a,&b)&&(a!=-1||b!=-1))
    {
        int i;
        minn=0;
        for(i=0;i<a;i++)
        {
            scanf("%d",&s[i]);
            if(s[i]>maxx)
                maxx=s[i];  //找出最大的
        }
        while(minn<maxx)
        {
            num=(maxx+minn)/2;  //取中间
            sum=0;              //sum是计算需要多少个信箱
            flag=0;            //标记是不是maxx太小
            for(i=0;i<a;i++)
            {
                sum=sum+ceil((s[i]+0.0)/num);  //ceil用法:取不小于给定实数的最小整数
                if(sum>b)  //maxx太小了
                {
                    flag=1;
                }
            }
            if(flag==1)
                minn=num+1;  //往右走
            else
                maxx=num;    //往左走
        }
        printf("%d\n",maxx);
    }
    return 0;
}

 

内容概要:本文详细探讨了杯形谐波减速器的齿廓修形方法及寿命预测分析。文章首先介绍了针对柔轮与波发生器装配时出现的啮合干涉问题,提出了一种柔轮齿廓修形方法。通过有限元法装配仿真确定修形量,并对修形后的柔轮进行装配和运转有限元分析。基于Miner线性疲劳理论,使用Fe-safe软件预测柔轮寿命。结果显示,修形后柔轮装配最大应力从962.2 MPa降至532.7 MPa,负载运转应力为609.9 MPa,解决了啮合干涉问题,柔轮寿命循环次数达到4.28×10⁶次。此外,文中还提供了详细的Python代码实现及ANSYS APDL脚本,用于柔轮变形分析、齿廓修形设计、有限元验证和疲劳寿命预测。 适合人群:机械工程领域的研究人员、工程师,尤其是从事精密传动系统设计和分析的专业人士。 使用场景及目标:①解决杯形谐波减速器中柔轮与波发生器装配时的啮合干涉问题;②通过优化齿廓修形提高柔轮的力学性能和使用寿命;③利用有限元分析和疲劳寿命预测技术评估修形效果,确保设计方案的可靠性和可行性。 阅读建议:本文涉及大量有限元分析和疲劳寿命预测的具体实现细节,建议读者具备一定的机械工程基础知识和有限元分析经验。同时,读者可以通过提供的Python代码和ANSYS APDL脚本进行实际操作和验证,加深对修形方法和技术路线的理解。
耦合类型分布是指在系统中存在多个耦合类型,并且它们的分布不均匀。耦合类型是指一个系统中不同组件或模块之间的相互关系和依赖程度。 在软件开发中,耦合类型的分布对系统的可维护性和扩展性有着重要影响。如果系统中存在大量紧密耦合的组件,那么系统的可维护性将变得较差,因为对一个组件的修改可能会导致其他多个组件的功能异常或故障。 耦合类型分布还会影响系统的扩展性。如果系统中的组件之间的耦合较高,那么在引入新的功能或修改现有功能时会更加困难。因为需要同时修改多个相关的组件,这样会增加开发的复杂性和风险。 为了减少耦合类型分布,可以采取以下几种方法: 1. 模块化设计:将系统拆分成多个独立的模块,并定义清楚的接口和依赖关系。这样可以降低模块之间的耦合程度,提高系统的可维护性和扩展性。 2. 使用解耦工具或框架:有些编程语言或框架提供了一些解耦工具或机制,可以帮助开发者降低组件之间的耦合程度。例如,事件驱动编程模型可以将组件之间的直接依赖转化为事件的触发和响应,从而降低组件之间的耦合性。 3. 设计和代码复审:通过设计和代码复审可以发现和修复潜在的耦合问题。在团队开发中,进行设计和代码复审可以提升开发者的意识,减少耦合类型分布。 总而言之,耦合类型分布是指系统中不同组件之间的相互关系和依赖程度的分布。减少耦合类型分布可以提高系统的可维护性和扩展性,需要通过模块化设计、解耦工具和设计复审等方法来实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值