题意:
输入一个正整数N(<=1e5),接下来输入N个整数。再输入一个正整数M(<=1e5),接下来输入M个整数。每次可以从两组数中各取一个,求最大的两个数的乘积的和。
AAAAAccepted code:
1 #define HAVE_STRUCT_TIMESPEC 2 #include<bits/stdc++.h> 3 using namespace std; 4 long long a[100007],b[100007]; 5 long long c[100007],d[100007]; 6 int cnta,cntb,cntc,cntd; 7 int main(){ 8 int n,m; 9 cin>>n; 10 long long x; 11 for(int i=1;i<=n;++i){ 12 cin>>x; 13 if(x>0) 14 a[++cnta]=x; 15 else if(x<0) 16 b[++cntb]=x; 17 } 18 cin>>m; 19 for(int i=1;i<=m;++i){ 20 cin>>x; 21 if(x>0) 22 c[++cntc]=x; 23 else if(x<0) 24 d[++cntd]=x; 25 } 26 long long ans=0; 27 sort(a+1,a+1+cnta); 28 sort(b+1,b+1+cntb); 29 sort(c+1,c+1+cntc); 30 sort(d+1,d+1+cntd); 31 for(int i=1;i<=min(cntb,cntd);++i) 32 ans+=b[i]*d[i]; 33 for(int i=cnta,j=cntc;i&&j;--i,--j) 34 ans+=a[i]*c[j]; 35 cout<<ans; 36 return 0; 37 }