CCF CSP 202006-2 稀疏向量 Python

【更新一份C++的“满分代码”】 可移步:

一、题目背景

稀疏向量(svector) 【题目描述】 对于一个 n 维整数向量 v ∈ Zn,其在第 index 个维度上的取值记作 vindex。这里我 们约定 index 的取值从 1 开始,即 v =(v1, v2, · · · , vn)。下面介绍一种向量的稀疏表示 方法。 如果 v 仅在少量维度上的取值不.为 0,则称其为稀.疏.向.量.。 例如当 n =10 时,v =(0, 0, 0, 5, 0, 0, −3, 0, 0, 1) 就是一个稀疏向量。 由于稀疏向量的非零值较少,我们可以通过仅存储非零值的方式来节省空间。具体 来说,每个非零值都可以用一个 (index, value) 对来表示,即该向量在第 index 个维度上 的取值 vindex =value ,0。在上面的例子中,v 就可以表示为 [(4, 5), (7, −3), (10, 1)]。 接下来给出这种稀疏表示一般化的定义。 • 对于任意一个 n 维整数向量 v ∈ Zn,如果其在且仅在 a 个维度上取值不为 0,则 可以唯一表示为:

[(index1, value1), (index2, value2), · · · , (indexa, valuea)] • 其中所有的 index 均为整数且满足: 1 ≤ index1 < index2 < · · · < indexa ≤ n • valuei 表示向量 v 在对应维度 indexi 上的非零值。 给出两个 n 维整数向量 u, v ∈ Zn 的稀疏表示,试计算它们的内积。

【输入格式】 从标准输入读入数据。 输入的第一行包含用空格分隔的三个正整数 n、a 和 b,其中 n 表示向量 u、v 的 维数,a 和 b 分别表示两个向量所含非零值的个数。 第二行到第 a +1 行输入向量 u 的稀疏表示。第 i +1 行(1 ≤ i ≤ a)包含用空格分 隔的两个整数 indexi 和 valuei,表示 uindexi =valuei ,0。 第 a +2 行到第 a +b +1 行输入向量 v 的稀疏表示。第 j +a +1 行(1 ≤ j ≤ b)包 含用空格分隔的两个整数 indexj 和 valuej,表示 vindexj =valuej ,0。

二、代码及分析

先挖个坑,60分代码,目测是最后四个测试点数据量太大了。 等想到好办法再更新代码 (也可能想不到了

【更新一份C++的“满分代码”】 可移步: https://blog..net/ftimes/article/details/107527537

n, a, b = map(int, input().split())
innerProduct = 0

map_u = {
          
   }
for i in range(a):
    i, v = map(int, input().split())
    map_u[i] = v

for i in range(b):
    i, v = map(int, input().split())
    if i in map_u.keys():
        innerProduct+=v*map_u[i]

print(innerProduct)
经验分享 程序员 微信小程序 职场和发展