CCF 202006-2 稀疏向量 python 满分
题目叙述问题描述:略输入格式:略输出格式:略样例
满分证明解题思路自己版本大佬版本
满分代码自己版本大佬版本
感谢及参考博文
题目叙述
问题描述:略
输入格式:略
输出格式:略
样例
样例输入
10 3 4
4 5
7 -3
10 1
1 10
4 20
5 30
7 40
样例输出
-20
满分证明
第一个是我自己版本; 第二个是大佬版本。 各有千秋(#.#)
解题思路
自己版本
刚开始也是超时,这个是修改过好多遍的 第一次,使用列表,尝试全部读完再处理,超时; 第二次,使用列表,尝试读完一个,读另一个时边读边处理,超时; 第二次,使用字典,尝试读完一个,读另一个时边读边处理,成功。
大佬版本
一次性读入,两个并行处理,时间取决于最短 总结 __读取花不了多长时间,但处理花时间多。__如果依次遍历,可能会超时,使用字典的好处就是直接找到索引位置,不需要逐个遍历。 用list的时候,去找u向量中指定值时,花时间太多。
满分代码
自己版本
n
, a
, b
= map(int, input().split())
dict_u
= {}
sum
= 0
for _ in
range(a
):
k_1
, val_1
= map(int, input().split())
dict_u
[k_1
] = val_1
for _ in
range(b
):
k_2
, val_2
= map(int, input().split())
if k_2 in dict_u
:
sum
+= val_2
* dict_u
[k_2
]
print(sum
)
大佬版本
import sys
n
, a
, b
= tuple(map(int, input().split()))
vector
= list(map(int, sys
.stdin.read().split()))
i
= 0
j
= 0
s
= 0
while i
< a
and j
< b
:
if vector
[i
* 2] == vector
[(a
+ j
) * 2]:
s
+= vector
[i
* 2 + 1] * vector
[(a
+ j
) * 2 + 1]
i
+= 1
j
+= 1
elif vector
[i
* 2] < vector
[(a
+ j
) * 2]:
i
+= 1
else:
j
+= 1
print(s
)
感谢及参考博文
部分内容参考以下链接,这里表示感谢 Thanks♪(・ω・)ノ 主要是看评论区的大佬 康风建 参考博文1 202006-2 CCF认证考试 Python版 稀疏向量 https://blog.csdn.net/weixin_41480156/article/details/107701647