#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int a[100010];
int b[100010];
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(int i=0;i<m;i++)
{
scanf("%d",&b[i]);
}
sort(a,a+n);
sort(b,b+m);
long long Max=0;
long long Min=0;
if(m>n)
{
for(int i=0;i<n;i++)
{
Max+=a[n-i-1]*b[m-i-1];
Min+=a[n-i-1]*b[i];
}
}
else
{
for(int i=0;i<m;i++)
{
Max+=a[n-i-1]*b[m-i-1];
Min+=a[i]*b[m-i-1];
}
}
printf("%lld %lld\n",Max,Min);
}
return 0;
}
其实下次不用自己手算,直接计算机算
自己试过一遍才发现
并不是小的与小的相乘才是最小的
因为后面大的也会直接和大的相乘
所以交叉相乘才最小
并且当面包总数较小时
就用面包最大的乘以最小的