CCF CSP 202006-2 稀疏向量 Python

【更新一份C++的“满分代码”】 可移步:[满分代码] CCF CSP 202006-2 稀疏向量

一、题目背景

稀疏向量(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++的“满分代码”】 可移步:[满分代码] CCF CSP 202006-2 稀疏向量
https://blog.csdn.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)

猜你喜欢

转载自blog.csdn.net/ftimes/article/details/107477287