CCF CSP 202006-2 稀疏向量
202006-2 稀疏向量
题目描述
对于一个n维整数向量,其在第个维度上的取值记作。这里我们约定的取值从1开始,即。下面介绍一种向量的稀疏表示方法。
如果仅在少量维度上的取值不为0,则称其为稀疏向量。
例如当时,就是一个稀疏向量。
由于稀疏向量的非零值较少,我们可以通过仅对存储非零值的方式来节省空间。具体来说,每个非零值都可以用一个对来表示,即该向量在第个维度上取值。在上面的例子中,就可以表示为。
接下来给出这种稀疏表示一般化的定义。
-
对于任意一个维整数向量,如果其在且仅在个维度上取值不为0,则可以唯一表示为:
-
其中所有的均为整数且满足:
-
表示向量在对应维度上的非零值。
给出两个维整数向量的稀疏向量表示,试计算它们的内积。
输入格式
从标准输入读入数据。
输入的第一行包含用空格分隔的三个正整数、和,其中表示向量的维数,和分别表示两个向量所含非零值的个数。
第二行到第行输入向量的稀疏表示。第行()包含用空格分隔的两个整数和,表示。
第行到第行输入向量的稀疏表示。第行()包含用空格分隔的两个整数和,表示。
输出格式
输出到标准输出。
输出一个整数,表示向量和的内积。
样例输入
10 3 4
4 5
7 -3
10 1
1 10
4 20
5 30
7 40
样例输出
-20
样例解释
子任务
- 输入数据保证;
- 向量和在每一维度上取值的绝对值。
分析
- 建立一个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;
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 【非技术】说说2024年我都干了些啥