【Math】

【问题描述】

给定2个数组a[]和b[],他们有相同的长度n,你可以任意对a[]和b[]进行重排列,我们定义函数

x=∑a[i]*b[i]

请问x最大可以取到多少,最小可以取到多少?

【输入格式】

第一行一个数字n,表示数组的长度;

第二行n个整数,表示数组a;

第三行n个整数,表示数组b;

【输出格式】

输出两个整数表示答案。

【输入样例】

2

10 3

10 9

【输出样例】

127 120

【样例说明】

Maximum:10*10+3*9=127

Minimum:10*3+10*9=120

【数据范围】

对40%的输入数据:n≤10

对100%的输入数据:n≤100000,1≤a[i],b[i]≤100000

设有a[1],a[2],b[1],b[2]四个元素,如果a[1]*b[1]+a[2]*b[2]<a[1]*b[2]+a[2]*b[1]那么可以推出a[1]<a[2],由此可以推测出如果a b都是递增数列的话乘积可以最大,相反,用最大×最小得出的乘积就是最小。排序相乘即可。

下面是代码:

 

stdKonjac

stdKonjac

一只挣扎的蒟蒻ACMer

评论太激烈有些评论需要亲动动手指翻页

留下你的评论

*评论支持代码高亮<pre class="prettyprint linenums">代码</pre>

*