当前位置: 首页 > 面试经验 >

【华为OD机试2023】日志采集系统(Python)

优质
小牛编辑
137浏览
2023-03-28

【华为OD机试2023】日志采集系统(Python)

题目描述:

日志采集是运维系统的的核心组件。日志是按行生成,每行记做一条,由采集系统分批上报。

如果上报太频繁,会对服务端造成压力;如果上报太晚,会降低用户的体验;如果一次上报的条数太多,会导致超时失败。

为此,项目组设计了如下的上报策略:

1、每成功上报一条日志,奖励1分

2、每条日志每延迟上报1秒,扣1分

3、积累日志达到100条,必须立即上报

给出日志序列,根据该规则,计算首次上报能获得的最多积分数

输入描述:

按时序产生的日志条数 T1,T2...Tn, 其中 1<=n<=1000, 0<=Ti<=100

输出描述:

首次上报最多能获得的积分数

示例1

输入:

1 98 1

输出:

98

说明:

采集系统第2个时刻上报,可获得最大积分(98+1)-1=98

示例2

输入:

50 60 1

输出:

50

说明:

如果第1个时刻上报,获得积分50。如果第2个时刻上报,最多上报100条,前50条延迟上报1s,每条扣除1分,共获得积分为 100-50=50

解题思路:

首先要确定上报日志的条数,如果总日志数超过100,那么首次只能上报100条;如果不足100,则可以全部上报

然后进行两层遍历,第一层用于确定何时上报,第二层用于确定直至上报为止,各个时间段的日志可获得的分数为多少。分数累加后赋值给score,将其与max_score对比,如果分更高,那么采取该方法,否则开始下一轮循环


rizhi=list(map(int,input().split()))
count=0
sum=0
for i,value in enumerate(rizhi):
if sum<100:
sum+=value
count+=1
else:
rizhi[i-1]-=(sum-100)
break
max_score=0
for i in range(count):
score=0
for j in range(i+1):
score+=rizhi[j]-rizhi[j]*(i-j)
max_score=max(max_score,score)
print(max_score)

#华为机试,emo了#
 类似资料: