华为机试-服务器能耗统计

题目

服务器有三种运行状态:空载、单任务、多任务,每个时间片的能耗的分别为1、3、4;

每个任务由起始时间片和结束时间片定义运行时间:

如果一个时间片只有一个任务需要执行,则服务器处于单任务状态;

如果一个时间片有多个任务需要执行,则服务器处于多任务状态;

给定一个任务列表,请计算出从第一个任务开始,到所有任务结束,服务器的总能耗。

思路 

使用差分数组进行求解,先构建差分数组,再还原为真实数组,遍历时间片即可

代码

num = int(input())
dif = [0] * 100001
min_value,max_value = 10000,-1
for i in range(num):
    l,r = map(int,input().split(" "))
    min_value = min(min_value,l)
    max_value = max(max_value,r)
    dif[l]+=1
    dif[r+1]-=1

time = [0] * (max_value+1)
time[0] = dif[0]
for i in range(1,max_value+1):
    time[i] += time[i-1]+dif[i]

ans = 0
for i in range(min_value,max_value+1):
    if time[i]==0:
        ans += 1
    elif time[i]==1:
        ans += 3
    else:
        ans += 4

print(ans)

# 测试1
# 3
# 4 8
# 1 6
# 2 9

# 测试2
# 2
# 2 5
# 8 9

猜你喜欢

转载自blog.csdn.net/qq_51118755/article/details/130397892