题目来源
http://118.190.20.162/view.page?gpid=T104
思路
本题难点主要在于如何找到下标相同的值。通过读题可以知道题目给的数据就是下标从小到大按递增顺序。 所以我们只需要设置两个下标分别从0开始, 直到u、v的大小-1,遍历u、v数据的下标。 遇到下标相同的便相乘与记录。
代码
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
struct Node {
int index;
int value;
};
int main() {
int N, A, B;
cin>>N>>A>>B;
Node u[A], v[B];
for (int i = 0; i < A; ++i) {
int index, value;
cin>>index>>value;
u[i] = {index, value};
}
for (int i = 0; i < B; ++i) {
int index, value;
cin>>index>>value;
v[i] = {index, value};
}
long long ans = 0;
int iu = 0, iv = 0;
while (iu < A && iv < B) {
if (u[iu].index == v[iv].index) {
ans += u[iu].value * v[iv].value;
++iu;
++iv;
}
else if (u[iu].index < v[iv].index ) {
++iu;
}
else {
++iv;
}
}
cout<<ans;
return 0;
}
注意点
自己测试代码时用ifstream, 但提交的时候一定要记得注释掉这句话。 不然直接就是错误、0分、又难找出原因。
|