写的一个代码,只有60分,不知道为啥
#include<cstdio>
using namespace std;
typedef struct vector_mode{
long index;
long value;
}Vector;
int main()
{
int n,a,b;
scanf("%d%d%d",&n,&a,&b);
Vector u[a],v[b];
for(int i=0;i<a;i++)
{
scanf("%d%d",&u[i].index,&u[i].value);
}
for(int j=0;j<b;j++)
{
scanf("%d%d",&v[j].index,&v[j].value);
}
long long sum=0;
int i=0,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) j++;
else i++;
}
printf("%lld\n",sum);
}
下面这个是100分的版本
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
int n;
int a, b;
long long ans; // 使用 long long
vector<pair<int, int> > u, v;
int main() {
scanf("%d%d%d", &n, &a, &b);
int id, val;
for(int i=0; i<a; i++) {
scanf("%d%d", &id, &val);
u.push_back({id, val});
}
for(int i=0; i<b; i++) {
scanf("%d%d", &id, &val);
v.push_back({id, val});
}
int i=0, j=0;
while(i<a && j<b){
if(u[i].first==v[j].first){
ans += u[i].second * v[j].second;
i++; j++;
}
else if(u[i].first>v[j].first){
j++;
}
else{
i++;
}
}
printf("%lld\n", ans);
return 0;
}