题目叙述
问题描述:略
输入格式:略
输出格式:略
样例
样例输入
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.youkuaiyun.com/weixin_41480156/article/details/107701647
需者自取传送门(∩ᄑ_ᄑ)⊃━☆【CCF 2013-2021】本博主整理历年至少前两题 python 满分代码目录