注意:scanf比cin快,两层循环变换为一层比设条件break快。
#include<iostream> using namespace std; const int MAX=500000; int ind1[MAX],val1[MAX],ind2[MAX],val2[MAX]; int main() { int n,a,b; scanf("%d %d %d",&n,&a,&b); long long sum=0; for(int i=0;i<a;i++) { scanf("%d %d",&ind1[i],&val1[i]); } for(int i=0;i<b;i++) { scanf("%d %d",&ind2[i],&val2[i]); } int i=0,j=0; while(i<a&&j<b) { if(ind1[i]==ind2[j]) { sum+=(val1[i]*val2[j]); i++; j++; } if(ind1[i]<ind2[j]) { i++; } if(ind1[i]>ind2[j]) { j++; } } cout<<sum<<endl; return 0; }