题目描述:
日志采集是运维系统的的核心组件。日志是按行生成,每行记做一条,由采集系统分批上报。
如果上报太频繁,会对服务端造成压力;如果上报太晚,会降低用户的体验;如果一次上报的条数太多,会导致超时失败。
为此,项目组设计了如下的上报策略:
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对比,如果分更高,那么采取该方法,否则开始下一轮循环
#华为机试,emo了#
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)