我正在尝试解决以下问题。
系统会为您提供n个数字和q个查询的数组。对于每个查询,您必须将子数组的期望值(均值)的底数从L打印到R。
第一行包含两个整数N和Q,分别表示数组元素的数量和查询的数量。
下一行包含N个由空格分隔的整数,它们表示数组元素。
接下来的Q行包含两个整数L和R(数组的索引)。
打印一个表示答案的整数。*
我已将print()
替换为stdout.write()
,将input()
替换为stdin.readline()
。
from sys import stdin, stdout
x,y=map(int,stdin.readline().split())
array=[int(x) for x in stdin.readline().split()]
result=[]
sum=0
for i in range(y):
l,r=map(int,stdin.readline().split())
for i in range(l-1,r):
sum = sum + array[i]
result.append(sum//(r-l+1))
sum=0
for i in result:
stdout.write(str(i)+"\n")
我的代码花费的时间约为8秒,解决挑战时间限制为1.5秒
答案 0 :(得分:0)
如果您将1-i
的和存储在数组的第i
个值中,则这种类型的问题通常非常简单,如下所示:
from sys import stdin, stdout
x,y=map(int,stdin.readline().split())
array=[int(x) for x in stdin.readline().split()]
sums = [sum(array[:i]) for i in range(len(array))]
result=[]
for i in range(y):
l,r=map(int,stdin.readline().split())
result.append((sums[r-1]-sums[l-1])//(r-l+1))
for i in result:
stdout.write(str(i)+"\n")
通过推定,它将程序的速度从O(N ^ 2)更改为O(N),这应该快得多。
答案 1 :(得分:-1)
删除附加操作。这是一项代价高昂的操作,并且因为您不会重复使用结果而不必要。相反,请直接执行:
for i in range(l-1,r):
sum = sum + array[i]
stdout.write(str(sum//(r-l+1))+"\n")
通过这样做,您也避免了经历第二个循环。 如果您尝试尝试,请在此处报告所需的时间。