解题思路:
1.将u,v定义成结构体,方便之后操作
2.如果要一一比对会很浪费时间,效率低,可以先进行排序,然后进行比较
3.要使用long long定义,因为数据会很大
#include<bits/stdc++.h>
using namespace std;
struct matrix //向量结构体
{
int index;
int value;
};
bool cmp(matrix a,matrix b) //自定义排序方式,根据index降序排列
{
if(a.index!=b.index)
{
return a.index<b.index;
}
return a.value<b.value;
}
int main()
{
int n,a,b;
cin>>n>>a>>b;
matrix u[a+5];
matrix v[b+5];
for(int i=0;i<a;i++)
{
cin>>u[i].index>>u[i].value;
}
for(int i=0;i<b;i++)
{
cin>>v[i].index>>v[i].value;
}
sort(u,u+a,cmp); //排序
sort(v,v+b,cmp);
long long sum=0; //long long定义
int i=0;
int j=0;
while(i<a&&j<b) //循环终止条件是有一个达到边界
{
if(u[i].index==v[j].index)
{
sum+=u[i].value*v[j].value;
i++;
j++;
}
else if(u[i].index<v[j].index)
{
i++;
}
else
{
j++;
}
}
cout<<sum;
return 0;
}