#include<bits/stdc++.h>
using namespace std;
bool cmp1(int a,int b){
return a>b;
}
bool cmp2(int a,int b){
return a<b;
}
int main(){
int a,b,_1;
scanf("%d",&a);
vector<int>a1,a2,b1,b2;
for(int i=0;i<a;i++){
scanf("%d",&_1);
if(_1>=0){
a1.push_back(_1);
}else{
a2.push_back(_1);
}
}
scanf("%d",&b);
for(int i=0;i<b;i++){
scanf("%d",&_1);
if(_1>=0){
b1.push_back(_1);
}else{
b2.push_back(_1);
}
}
sort(a1.begin(),a1.end(),cmp1);
sort(b1.begin(),b1.end(),cmp1);
sort(a2.begin(),a2.end(),cmp2);
sort(b2.begin(),b2.end(),cmp2);
long long int sum=0;
for(int i=0;i<min(a1.size(),b1.size());i++){
sum+=a1[i]*b1[i];
}
for(int i=0;i<min(a2.size(),b2.size());i++){
sum+=a2[i]*b2[i];
}
printf("%lld",sum);
return 0;
}
总结
1.本题再输入时将正负分开,正的按从大到小排列,负的按从小到大排列,然后选size()小的对应相乘即可
英语
问题 无