【样例输入】
10 3 4
4 5
7-3
10 1
1 10
4 20
5 30
7 40
【样例输出】
-20
第一回合
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int n,a,b;
long long ans=0;
vector<pair<int,int> > u,v;
int main(){
cin>>n>>a>>b;
int index,value;
for(int i=0;i<a;i++){
cin>>index>>value;
u.push_back({index,value});
}
for(int i=0;i<b;i++){
cin>>index>>value;
v.push_back({index,value});
}
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++;
}
}
cout<<ans<<endl;
return 0;
}
第二回合
使用结构体存储index和value,只有30分,我还没有找到优化的方法
╥﹏╥
#include<iostream>
#include<algorithm>
using namespace std;
const long N=1e4;
struct node{
int x;
int y;
};
int main(){
struct node u[N],v[N];
int n,a,b;
long long ans=0;
int index,value;
cin>>n>>a>>b;
for(int i=0;i<a;i++){
cin>>index>>value;
u[i].x=index;
u[i].y=value;
}
for(int i=0;i<b;i++){
cin>>index>>value;
v[i].x=index;
v[i].y=value;
}
int i=0,j=0;
while(i<a && j<b){
if(u[i].x==v[j].x){
ans+=(u[i++].y*v[j++].y);
} else if(u[i].x>v[j].x){
j++;
}
else{
i++;
}
}
cout<<ans<<endl;
return 0;
}