题目地址稀疏向量
此题解题思路是因为是稀疏向量,所以肯定不能用数组,此题最好使用 vector<pair<int,int> > 来保存传入的数据。
同时还要考虑到数据量一旦大的话,就不能把向量A中的一个元素和向量B中的元素比较N次。
考虑输入的向量总是顺序的,可以维护两个数字下表来控制比较的次数
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int n,a,b;
cin>>n>>a>>b;
vector<int> arr1;
vector<int> arr2;
vector<int> arr3;
vector<int> arr4;
//输入向量A数据
for(int i=0;i<a;i++){
int lef,rig;
cin>>lef>>rig;
arr1.push_back(lef);
arr2.push_back(rig);
}
//输入向量B数据
for(int i=0;i<b;i++){
int lef,rig;
cin>>lef>>rig;
arr3.push_back(lef);
arr4.push_back(rig);
}
//乘积之和可能过大,用long long保存
long long sum=0;
//向量A,B下标
int ant=0,bnt=0;
while(ant<arr1.size() && bnt<arr3.size()){
//维度相等乘积加入sum
if(arr1[ant]==arr3[bnt]){
sum+=arr2[ant]*arr4[bnt];
ant++;
bnt++;
}
//向量B维度小于向量A,向量B下标++
else if(arr1[ant]>arr3[bnt]){
bnt++;
}
//向量A维度小于向量B,向量A下标++
else{
ant++;
}
}
cout<<sum;
return 0;
}