1,这题看完数据规模 1e6*1e6 就应该知道两次循环是会超时的 但还是不死心试了一次,最后运行超时 30分;
2,第二次换成双指针了,复杂度降到了一阶,但还是超时了,最后70分,想了想应该没法继续改进算法降低复杂度了,所以估计是输入输出的问题;
3,把cin cout 换成scanf printf后,又试了一次,结果居然错误60分了,好在没超时,方向对了;
4,仔细检查发现是long long类型输出时没用lld,果然是一个多月没做题,手生的啊。
using namespace std;
#include<bits/stdc++.h>
const int maxn=1e6;
struct node{
int index;
int value;
};
node u[maxn],v[maxn];
bool cmp(node x,node y){
return x.index<y.index;
}
int main(){
int n,a,b;
scanf("%d %d %d",&n,&a,&b);
// cin>>n>>a>>b;
for(int i=0;i<a;i++) scanf("%d %d",&u[i].index,&u[i].value);
// cin>>u[i].index>>u[i].value;
sort(u,u+a,cmp);
for(int i=0;i<b;i++) scanf("%d %d",&v[i].index,&v[i].value);
// cin>>v[i].index>>v[i].value;
sort(v,v+b,cmp);
long long ans=0;
int i=0,j=0;
while(i != a && j!=b)
{
if(u[i].index == v[j].index)
{
ans+=u[i].value*v[j].value;
i++;
j++;
}
else if(u[i].index < v[j].index) i++;
else j++;
}
printf("%lld\n",ans); //long long 输出要注意
// cout<<ans<<"\n";
return 0;
}
/*
10 3 4
4 5
7 -3
10 1
1 10
4 20
5 30
7 40
*/