#include <iostream>
#include <vector>
#define MaxN 501
#define NAN 1001
using namespace std;
struct cell{
int index, value;
cell():index(),value(){}
cell(int idx, int val):index(idx),value(val){}
};
//数组固定的话
vector<cell> tracU,tracV;
int main()
{
int n,numa,numb;
int tidx,tval;
long long res=0;
cin>>n>>numa>>numb;
for(int j=0;j<numa;j++){
cin>>tidx>>tval;
tracU.push_back(cell(tidx,tval));
}
for(int j=0;j<numb;j++){
cin>>tidx>>tval;
tracV.push_back(cell(tidx,tval));
}
//tip 原来60分代码处
int Uidx=0,Vidx=0;
while(1){
int uid=tracU[Uidx].index ;
int vid=tracV[Vidx].index;
if(Uidx==numa||Vidx==numb)
break;
if(uid <vid ){
Uidx++;
}else if(vid <uid ){
Vidx++;
}else{
res+=tracU[Uidx].value*tracV[Vidx].value;
Uidx++;
Vidx++;
}
}
cout<<res<<endl;
return 0;
}
注意:
1.结果要用long long, int 会溢出
2.注意 运算超时
笨办法(60分):
int flag1=0,flag2=0;
int Uidx=0,Vidx=0;
for(int i=1;i<=n;i++){
int ui=0,vi=0;
if(i==tracU[Uidx].index &&Uidx<numa){
ui=tracU[Uidx].value;
Uidx++;
flag1=1;
}
if(i==tracV[Vidx].index &&Vidx<numb){
vi=tracV[Vidx].value;
Vidx++;
flag2=1;
}
if(flag1&&flag2){
res+=ui*vi;
}
}
3.有的博文提到存在n不合法的情况,我没考虑,但是也过了。母鸡啊,玄学