题目
服务器有三种运行状态:空载、单任务、多任务,每个时间片的能耗的分别为1、3、4;
每个任务由起始时间片和结束时间片定义运行时间:
如果一个时间片只有一个任务需要执行,则服务器处于单任务状态;
如果一个时间片有多个任务需要执行,则服务器处于多任务状态;
给定一个任务列表,请计算出从第一个任务开始,到所有任务结束,服务器的总能耗。
思路
使用差分数组进行求解,先构建差分数组,再还原为真实数组,遍历时间片即可
代码
1. num = int(input()) 2. dif = [0] * 100001 3. min_value,max_value = 10000,-1 4. for i in range(num): 5. l,r = map(int,input().split(" ")) 6. min_value = min(min_value,l) 7. max_value = max(max_value,r) 8. dif[l]+=1 9. dif[r+1]-=1 10. 11. time = [0] * (max_value+1) 12. time[0] = dif[0] 13. for i in range(1,max_value+1): 14. time[i] += time[i-1]+dif[i] 15. 16. ans = 0 17. for i in range(min_value,max_value+1): 18. if time[i]==0: 19. ans += 1 20. elif time[i]==1: 21. ans += 3 22. else: 23. ans += 4 24. 25. print(ans) 26. 27. # 测试1 28. # 3 29. # 4 8 30. # 1 6 31. # 2 9 32. 33. # 测试2 34. # 2 35. # 2 5 36. # 8 9