CSP202006-2 Vectores dispersos (Python)

Directorio de artículos

tema

Pregunta No.: 202006-2
Nombre de la pregunta: vector escaso
límite de tiempo: 2.0s
Limite de memoria: 512,0 MB

Título Descripción
  Para un vector entero de dimensión n v ∈ Z n , su valor en la dimensión índice-ésima se registra como índice v . Aquí estamos de acuerdo en que el valor de índice parte de 1, es decir, v = (v 1 , v 2 , ..., v n ). A continuación se presenta un método de representación vectorial dispersa.
  Si v tiene valores distintos de 0 en solo un pequeño número de dimensiones, se dice que es un vector disperso.
  Por ejemplo, cuando n=10, v=(0, 0, 0, 5, 0, 0, -3, 0, 0, 1) es un vector disperso.
  Dado que los vectores dispersos tienen menos valores distintos de cero, podemos ahorrar espacio almacenando solo valores distintos de cero. Específicamente, cada valor distinto de cero se puede representar mediante un par (índice, valor), es decir, el valor del vector en la dimensión índice-ésima v índice = valor ≠ 0. En el ejemplo anterior, v puede expresarse como [(4,5),(7,-3),(10,1)].
  A continuación se da una definición generalizada de esta escasa representación.
  ● Para cualquier vector entero n-dimensional v ∈ Z n , si su valor no es 0 en y solo en una dimensión, se puede expresar de forma única como:
    [(índice 1 ,valor 1 ),(índice 2 ,valor 2 ), …,(índicea ,valor a )]
  ● donde todos los índices son enteros y cumplen:
    1 ≤ índice 1 < índice 2 < ... < índice a ≤ n
  ● índice i significa que el vector v está en la dimensión correspondiente índice i . valor distinto de cero en .
  Dadas las escasas representaciones de dos vectores enteros n-dimensionales u, v∈ Z n , intente calcular su producto interno.
inserte la descripción de la imagen aquí

Formato de entrada
  Lee datos de la entrada estándar.
  La primera línea de entrada contiene tres números enteros positivos n, a y b separados por espacios, donde n representa la dimensión del vector u, v, y a y b representan el número de valores distintos de cero contenidos en los dos vectores respectivamente .
  Las líneas 2 a a+1 son la representación escasa del vector de entrada u. La línea i+1 (1 ≤ i ≤ a) contiene dos números enteros índice i y valor i separados por un espacio , lo que indica que v índice = valor i ≠ 0.
  Las líneas a+2 a las líneas a+b+1 ingresan una representación escasa del vector v. La línea j + a + 1 (1 ≤ j ≤ b) contiene dos números enteros índice j y valor j separados por espacios , lo que indica que v índice = valor j ≠ 0.

formato de salida
  Salida a salida estándar.
  Muestra un número entero que representa el producto interno u·v de los vectores u y v.

Ejemplo de entrada
  10 3 4
  4 5
  7 -3
  10 1
  1
  10 4 20
  5 30
  7 40

Salida de muestra
  - 20

Ejemplo Explicación
  u = (0,0,0,5,0,0,-3,0,0,1)
  v = (10,0,0,20,30,0,40,0,0,0)
  u ·v=5×20+(-3)×40 = -20

Subtareas
  ● Asegúrese de que los datos de entrada sean 0 <a, b < n;
  ● Los valores absolutos de los vectores u y v en cada dimensión |u i |,|u i |≤10 6 (1 ≤ i ≤ n).
inserte la descripción de la imagen aquí

código

# 输入n,a,b
n,a,b = map(int,input().split())

# 创建a,b字典
vector_a = {
    
    }
vector_b = {
    
    }

# 循环输入a和b的(index,value)
for i in range(a):
    index,value = map(int,input().split())
    vector_a.update({
    
    index:value})
for i in range(b):
    index,value = map(int,input().split())
    vector_b.update({
    
    index:value})

#  内积初始化
uv = 0

# 获取a的key列表
keys = list(vector_a.keys())

# 遍历a的key列表
for key in keys:
    # 当a,b具有相同index的元素
    if key in vector_b:
        uv += vector_a[key] * vector_b[key]
    
# 输出内积
print(uv)

Supongo que te gusta

Origin blog.csdn.net/qq_45899597/article/details/114018573
Recomendado
Clasificación