haha:-(

4.题意大概是,

(1) 每次打印A中的最小值
(2) A中的数都减去(1)中打印的值
(3)循环(1)(2)k次
若A中没有最小值可以打印了,就打印0

输入:
n k
a i a_i ai #n个 a i a_i ai

7 5
5 8 10 3 6 10 8

输出:

3
2
1
2
2

【分析】也是比较简单,或许还是我练习不够的缘故吧,加油。

n=7;k=5
A=[5 ,8, 10, 3 ,6 ,10, 8]
A=sorted(list(set(A)))
i=0;a0=0
while i<k:
    if(len(A))>0:
        print(A[0]-a0)
        a0=A[0]
        A.pop(0)        
    else:
        print(0)
    i+=1
K=5
A=[5 ,8, 10, 3 ,6 ,10, 8]
n=len(A)
A=sorted(list(set(A)))
k=0;a0=0
for i in range(n):
    if k<K:
        a=A[i]-a0
        if a==0:
            pass
        else:
            print(a)
            a0=A[i]
            k+=1
    else:
        break
while k<K:
    print(0)

2.两两配对
题意大概是:现在领导有m(m为偶数)个人,每两个人一起共同完成一个任务,完成任务的时间为两个人的时间权值之和,现在给出n行数据,每行数据有两个值x和y,代表有x个人的时间权值为y,求所有任务最快在什么时候都完成。

这道题有内存限制,之前是用了一个List来放所有的数,但是这些数若有重复的话,可能会超出内存限制。现在利用dict来做。主要的思路是,有m个任务,任务分配按照权值排序,最大和最小配对,次大和次小配对,…

S=int(raw_input())  # n  m
dic={}
for n in range(S[0]):
    tmp=map(int,raw_input().split(" "))   # x  y表示x个人的时间权值是y
    dic[tmp[1]]=tmp[0]
res=0
while len(dic)>0:  
    res=max(res,min(dic)+max(dic))
    dic[min(dic)]-=1
    dic[max(dic)]-=1
    if dic[min(dic)]==0:
        dic.pop(min(dic))
    if len(dic)>0 and dic[max(dic)]==0:
        dic.pop(max(dic))
print(res)

3.分组
题意:有n个人比赛,每个人都有一个权值,现在要将n个人分成两组,两组间的人数差<=1,问怎么分组可以使得两个组的人的权值和的差最小。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值