202006-2 稀疏向量
这道题思路真的很简单,但是我一直做不对!最多60分了。
两种方法:
使用字典,显示“运行超时”:
data = list(map(int,input().split()))
n,a,b = data[0],data[1],data[2]
out = 0
u = {
}
v = {
}
for i in range(a+b):
u1,u2 = map(int,input().split())
if i < a:
u[u1]=u2
else:
if u1 in u :
out+=u[u1]*u2
print(out)
使用列表,显示“运行错误”:
data = list(map(int,input().split()))
n,a,b = data[0],data[1],data[2]
out = 0
u = [0]*n
v = [0]*n
for _ in range(a):
u1,u2 = map(int,input().split())
if u2!=0:
u[u1-1]=u2
for _ in range(b):
u1,u2 = map(int,input().split())
if u2!=0:
v[u1-1]=u2
for i in range(n):
if u[i] != 0 and v[i] != 0:
out+=u[i]*v[i]
print(out)
如果有大佬可以献上解决方案是最好的了!
更新最新的满分代码:
尝试使用 sys.stdin.readlines()将标准输入全部获取
还有一个要注意的是,如果多加了一个向量i控制读取(如:i < a 和 对应的 i+=1操作),而不是像下面的代码那样的直接在读取到的a上面操作,还是会出现运行超时的问题,下面的代码运行时长为1.906s,好险!
import sys
data = list(map(int,input().split()))
n,a,b = data[0],data[1],data[2]
out = 0
u = {
}
# sys.stdin.readlines() 将标准输入全部获取
for line in sys.stdin.readlines():
u1,u2 = map(int,line.split())
if a > 0:
u[u1]=u2
a -= 1
else:
if u1 in u :
out+=u[u1]*u2
print(out)