题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=3794
C语言源码:
#include<stdio.h>
#include<stdlib.h>
#define maxsize 1000010
int cmp1(const void *a,const void *b)
{
return *(int *)b-*(int *)a;
}
int cmp2(const void *a,const void *b)
{
return *(int *)a-*(int *)b;
}
int A[maxsize],B[maxsize],C[maxsize],D[maxsize];
int topA,topB,topC,topD;
int main()
{
int i,n,x;
_int64 sum;
while(1)
{
scanf("%d",&n);
if(n<0)
break;
topA=0;
topB=0;
topC=0;
topD=0;
for(i=0;i<n;i++)
{
scanf("%d",&x);
if(x>=0)
A[topA++]=x;
else
B[topB++]=x;
}
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&x);
if(x>=0)
C[topC++]=x;
else
D[topD++]=x;
}
qsort(A,topA,sizeof(A[0]),cmp1);
qsort(B,topB,sizeof(B[0]),cmp2);
qsort(C,topC,sizeof(C[0]),cmp1);
qsort(D,topD,sizeof(D[0]),cmp2);
sum=0;
for(i=0;i<topA&&i<topC;i++)
sum+=(_int64)A[i]*C[i];
for(i=0;i<topB&&i<topD;i++)
sum+=(_int64)B[i]*D[i];
printf("%I64d\n",sum);
}
}