蓝桥杯 打包 最小字符串 贪心 二分 python

这是一个关于如何优化包裹重量分配和字符串排序的问题。第一个问题涉及找到一种方法,将N个礼物以最小的最大重量打包成M个包裹,同时保持每个包裹内的礼物编号连续。第二个问题是将T组字符串按照字典序最小的方式组合。解决方案分别使用了二分查找和冒泡排序算法来实现目标。
摘要由CSDN通过智能技术生成

打包

问题描述

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

输入格式

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

输出格式

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

样例输入

3 2
1 1 2

样例输出

2

数据规模和约定

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

n,m=map(int,input().split())
la=list(map(int,input().split()))
lb=la
def judge(tar):
    n=len(la)
    tar2=tar
    a=0
    i=0
    while i<n:
        if la[i]<tar:
            tar=tar-la[i]
            i=i+1
        else:
            tar=tar2
            a=a+1
            if a>=m:
                return False
    return  True
def erfen():
    l,r=max(la),sum(la)
    while l<=r:
        mid=(l+r)//2
        if judge(mid):
            r=mid-1
        else:
            l=mid+1
    print(min(l,r))
erfen()

最小字符串

问题描述

  给定一些字符串(只包含小写字母),要求将他们串起来构成一个字典序最小的字符串。

输入格式

  第一行T,表示有T组数据。
  接下来T组数据
  每组第一行一个正整数n,表示字符串个数。
  接下来n行,每行一个字符串(长度不超过100)。

输出格式

  T行,每行一个字符串。

样例输入

1
3
a
b
c

样例输出

abc

数据规模和约定

  T<=7000,n<=100;
 

t=int(input())
lb=[]
for i in range(t):
    n=int(input())
    la=[]
    for l in range(n):
        la.append(input())
    for j in range(n):
        for k in range(j+1,n):
            if la[j]+la[k]>la[k]+la[j]:
                la[j],la[k]=la[k],la[j]
    s="".join(la)
    lb.append(s)
for i in range(t):
    print(lb[i])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值