想了个思路,网上搜一下是对的,然后自己实现了
才知道这就叫贪心
另外不用考虑那个数字<2^30
#include <stdio.h>
#include <algorithm>
#define len 100000+5
int NC, NP;
int c[len],p[len];
int cmp(const void * a, const void * b){//默认顺序也还是要定义一个 cmp
return (*(int*)a - *(int *)b);
}
int main(){
//freopen("in.txt","r",stdin);
scanf("%d",&NC);
for(int i = 0 ; i < NC; i++){
scanf("%d",&c[i]);
}
scanf("%d",&NP);
for(int i = 0 ; i < NP; i++){
scanf("%d",&p[i]);
}
qsort(c,NC,sizeof(int),cmp);
qsort(p,NP,sizeof(int),cmp);
long long res = 0;
for(int i = NC-1, j = NP-1; i >= 0 && j >= 0; i--,j--){
if(c[i]>0 && p[j]>0){
res += c[i]*p[j];
}
}
for(int i =0, j = 0; i < NC && j < NP; i++,j++){
if(c[i]<0 && p[j]<0){
res += c[i]*p[j];
}
}
printf("%lld",res);
}