"""
description:
given a music set, select a pair of musics
and the sum of these two musics's duration is right minutes (divisible by 60)
example 1:
input:
[20 40 60]
output:
1
(20,40)
example 2:
input:
[20 40 60 120]
output:
2
(20,40),(60,120)
"""
"""
基本思想:
这是一个有限的组合匹配问题,暴力搜索的复杂度是O(n^2),使用直方图统计每一个长度的音乐的个数,然后进行组合,注意长度为60的倍数的音乐和长度为30的音乐要特殊处理,负责度是O(n)
"""
import sys
playlist=[20, 40, 60, 60, 120, 30, 30, 30, 60, 29, 31, 28, 32, 1, 59]
def get_num(playlist):
hist = [int(0)]*60
for data in playlist:
hist[int(data%60)] += 1
num = int(0)
for idx in range(30-1):
num += hist[idx+1]*hist[59-idx] #29
num += hist[30]*(hist[30]-1)/2 + hist[0]*(hist[0]-1)/2
return int(num)
if __name__ == "__main__":
playlist = eval(sys.stdin.readline().strip())
print(get_num(playlist))
笔试编程题汇总(4)
最新推荐文章于 2024-05-05 02:44:58 发布