CCF CSP 202006-2 稀疏向量

202006-2 稀疏向量

题目描述

对于一个n维整数向量vZn,其在第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=value0。在上面的例子中,v就可以表示为[(4,5),(7,3),(10,1)]

接下来给出这种稀疏表示一般化的定义。

  • 对于任意一个n维整数向量vZn,如果其在且仅在a个维度上取值不为0,则可以唯一表示为:

    [(index1,value1),(index2,value2),...,(indexa,valuea)]

  • 其中所有的index均为整数且满足:

    1index1<index2<...<indexan

  • valuei表示向量v在对应维度indexi上的非零值。

    给出两个n维整数向量u·vZn的稀疏向量表示,试计算它们的内积。

    u·v=i=1nui·vi

输入格式

从标准输入读入数据。

输入的第一行包含用空格分隔的三个正整数nab,其中n表示向量u,v的维数,ab分别表示两个向量所含非零值的个数。

第二行到第a+1行输入向量u的稀疏表示。第i+1行(1ia)包含用空格分隔的两个整数indexivaluei,表示uindexi=valuei0

a+2行到第a+b+1行输入向量v的稀疏表示。第j+a+1行(1jb)包含用空格分隔的两个整数indexivaluej,表示vindexj=valuej0

输出格式

输出到标准输出。

输出一个整数,表示向量uv的内积u·v

样例输入

10 3 4
4 5
7 -3
10 1
1 10
4 20
5 30
7 40

样例输出

-20

样例解释

u=(0,0,0,5,0,0,3,0,0,1)

v=(10,0,0,20,30,0,40,0,0,0)

u·v=50×20+(3)×40=20

子任务

  • 输入数据保证0<a,b<n
  • 向量uv在每一维度上取值的绝对值|ui|,|vi|106(1in)

分析

  • 建立一个vector,在输入第二个向量的数据时,同时进行运算满分。
  • 时间复杂度:a+a*b

代码

#include<iostream>
#include<map>

using namespace std;
map<int, int> svector;

int main() {
    ios::sync_with_stdio(false);
    int n, a, b;
    cin >> n >> a >> b;
    int index, value, i;
    long long sum = 0;
    for (i = 1; i <= a; i++) {
        cin >> index >> value;
        svector[index] = value;
    }
    for (i = 1; i <= b; i++) {
        cin >> index >> value;
        if (svector[index] != 0) {
            sum += svector[index] * value;
        }
    }
    cout << sum << endl;
    return 0;
}
posted @   张吱吱  阅读(522)  评论(1编辑  收藏  举报
编辑推荐:
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
阅读排行:
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 【非技术】说说2024年我都干了些啥
点击右上角即可分享
微信分享提示