CCF-CSP 202006-2 稀疏向量
题目描述
思路
用一个vector<myClass>表示一个向量。由于两个向量分别有序。故双指针一次遍历可以解决。注意数据范围,结果不能用int,可以用 long long。
代码
#include <iostream>
#include <vector>
using namespace std;
class myClass{
public:
int index, value;
myClass(int _index, int _value){
index = _index;
value = _value;
}
};
int main(){
int n;
int a,b;
cin >> n;
cin >> a;
cin >> b;
vector<myClass> vectorA, vectorB;
int i;
int index, value;
for (i = 0; i < a; i++){
cin >> index;
cin >> value;
vectorA.push_back(myClass(index,value));
}
for (i = 0; i < b; i++){
cin >> index;
cin >> value;
vectorB.push_back(myClass(index,value));
}
int p = 0, q = 0;
long long prod = 0;
while (p < a && q < b){
if (vectorA[p].index < vectorB[q].index){
p++;
}
else if (vectorA[p].index > vectorB[q].index){
q++;
}
else{
//索引相同,对prod有贡献
prod += vectorA[p].value * vectorB[q].value;
p++;q++;
}
}
cout << prod;
return 0;
}
该博客详细介绍了如何解决CCF CSP 2020年6月第二题的稀疏向量问题。通过使用双指针策略,博主展示了如何有效地处理有序向量并避免溢出问题,建议使用长整型计算结果。



258

被折叠的 条评论
为什么被折叠?



