Magic Coupon
解答:
排序过后正正相乘,负负相乘,累加。
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int n1,n2,i,j,sum=0;
int a[100000],b[100000];
cin>>n1;
for(i=0;i<n1;i++) cin>>a[i];
cin>>n2;
for(i=0;i<n2;i++) cin>>b[i];
sort(a,a+n1);
sort(b,b+n2);
// -1 1 2 4
// -3 -2 6 7
for(i=j=0;i<n1&&j<n2&&b[j]<0&&a[i]<0;i++,j++) {sum+=a[i]*b[j];}
for(i=n1-1,j=n2-1;i>=0&&j>=0&&a[i]>0&&b[j]>0;i--,j--) {sum+=a[i]*b[j];}
cout<<sum;
return 0;
}