蓝桥试题 算法提高 打包(二分法,最大值最小化)

资源限制

时间限制:1.0s   内存限制:256.0MB

问题描述

  Lazy有N个礼物需要打成M个包裹,邮寄给M个人,这些礼物虽然很便宜,但是很重。Lazy希望每个人得到的礼物的编号都是连续的。为了避免支付高昂的超重费,他还希望让包裹的最大重量最小。

输入格式

  一行两个整数N和M。
  一行N个整数,表示N个礼物的重量。

输出格式

  一个整数,表示最小的最大重量。

样例输入

3 2
1 1 2

样例输出

2

数据规模和约定

  N, M <= 100,000
  重量 <= 1,000

分析:

结果必定落在【max(nums), sum(nums)】这个区间内,因为左端点对应每个单独的元素构成一个子数组,右端点对应所有元素构成一个子数组。

然后可以利用二分查找法逐步缩小区间范围,当区间长度为1时,即找到了最终答案。

# 开发人:HGC
# 开发时间:2021-11-16 20:20

n,m=list(map(int,input().split()))
weight=list(map(int,input().split()))
right=sum(weight)
left=max(weight)
while right>left:
    mid=int((left+right)/2)
    temp=0
    count=1
    for i in weight:
        tem
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
 (编程题)花朵数 一个N位的十进制正整数,如果它的每个位上的数字的N次方的和等于这个数本身,则称其为花朵数。 例如: 当N=3时,153就满足条件,因为 1^3 + 5^3 + 3^3 = 153,这样的数字也被称为水仙花数(其中,“^”表示乘方,5^3表示5的3次方,也就是立方)。 当N=4时,1634满足条件,因为 1^4 + 6^4 + 3^4 + 4^4 = 1634。 当N=5时,92727满足条件。 实际上,对N的每个取值,可能有多个数字满足条件。 程序的任务是:求N=21时,所有满足条件的花朵数。注意:这个整数有21位,它的各个位数字的21次方之和正好等于这个数本身。 如果满足条件的数字不只有一个,请从小到大输出所有符合条件的数字,每个数字占一行。因为这个数字很大,请注意解法时间上的可行性。要求程序在3分钟内运行完毕。 【程序运行参考结果】 128468643043731391252 449177399146038697307  (编程题)信用卡号验证 当你输入信用卡号码的时候,有没有担心输错了而造成损失呢?其实可以不必这么担心,因为并不是一个随便的信用卡号码都是合法的,它必须通过Luhn算法来验证通过。 该校验的过程: 1、从卡号最后一位数字开始,逆向将奇数位(1、3、5等等)相加。 2、从卡号最后一位数字开始,逆向将偶数位数字,先乘以2(如果乘积为两位数,则将其减去9),再求和。 3、将奇数位总和加上偶数位总和,结果应该可以被10整除。 例如,卡号是:5432123456788881 则奇数、偶数位(用红色标出)分布:5432123456788881 奇数位和=35 偶数位乘以2(有些要减去9)的结果:1 6 2 6 1 5 7 7,求和=35。 最后35+35=70 可以被10整除,认定校验通过。 请编写一个程序,从标准输入获得卡号,然后判断是否校验通过。通过显示:“成功”,否则显示“失败”。 比如,用户输入:356827027232780 程序输出:成功 【程序测试参考用例】 356406010024817 成功 358973017867744 成功 356827027232781 失败 306406010024817 失败 358973017867754 失败  (c/c++组代码填空)下列代码把一个串p复制到新的位置q。请填写缺少的语句; char* p = "abcde"; char* q = (char*)malloc(strlen(p)+1); for(int i=0;_____________; i++) q[i] = p[i]; q[i] = 0; 【参考答案】 P[i] 或 *(p+i) 或 p[i] != '\0' 或 ... (答案不唯一,以选手提供代码带入专用验证程序测试为依据,验证程序比题面中提供的程序片段更严谨,更完善)  (Java组代码填空)有n个孩子站成一圈,从第一个孩子开始顺时针方向报数,报到3的人出列,下一个人继续从1报数,直到最后剩下一个孩子为止。问剩下第几个孩子。下面的程序以10个孩子为例,模拟了这个过程,请完善之(提示:报数的过程被与之逻辑等价的更容易操作的过程所代替)。 Vector a = new Vector(); for(int i=1; i<=10; i++) { a.add("第" + i + "个孩子"); } for(;;) { if(a.size()==1) break; for(int k=0; k<2; k++) ________________; a.remove(0); } System.out.println(a); 【参考答案】 a.add(a.remove(0)) (答案不唯一,以选手提供代码带入专用验证程序测试为依据,验证程序比题面中提供的程序片段更严谨,更完善)  (结果填空题) 有趣的平方数 625这个数字很特别,625的平方等于390625,刚好其末3位是625本身。除了625,还有其它的3位数有这个特征吗?还有一个!该数是:_____________ 【参考答案】 376

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值