本题考数学,难度不高。
首先,如果一个组中有x人,那么这个组中朋友的组数就是Cx2=2x(x−1)。
假设一共分为k组,共有n人,每一组中的人数分别为a1,a2,a3,…,ak−1,ak,则朋友的组数为:
2a1(a1−1)+2a2(a2−1)+2a3(a3−1)+⋯+2ak−1(ak−1−1)+2ak(ak−1)
=2a1(a1−1)+a2(a2−1)+a3(a3−1)+⋯+ak−1(ak−1−1)+ak(ak−1)
=2a12+a22+a32+⋯+ak−12+ak2−a1−a2−a3−⋯−ak−1−ak
=2a12+a22+a32+⋯+ak−12+ak2−(a1+a2+a3+⋯+ak−1+ak)
又,由题意知:a1+a2+a3+⋯+ak−1+ak=n,为定值。
所以问题转化为求a12+a22+a32+⋯+ak−12+ak2的最大值与最小值。
先看最小值。
由柯西不等式得:
(a12+a22+a32+⋯+ak−12+ak2)(12+12+12+⋯+12+12k个12)⩾(a1+a2+a3+⋯+ak−1+ak)2
(不明白柯西不等式的同学可以自己百度,这里由于篇幅的原因就不赘述了。)
即
k(a12+a22+a32+⋯+ak−12+ak2)⩾n2
移项,得
(a12+a22+a32+⋯+ak−12+ak2)⩾kn2
故a12+a22+a32+⋯+ak−12+ak2的最小值为kn2。
此时原式的值为2kn2−n=2kn2−kn=2kn(n−k)
故朋友的组数最小为⌈2kn(n−k)⌉(向上取整是因为人数必须是正整数)。
再看最大值。
实际上,如果把这个问题当作一个纯粹的数学问题来研究,最大值应该是无穷大。不过在这里,由于人数只能是正整数,所以还是可以有最大值的,只不过比较不好叙述。
现在我们一起来考虑一个事情:函数f(x)=x2的增长速度。
学过导数的同学应该知道,函数f(x)=x2的导数应该是2x,也就是说,x越大,此函数增长的就越快。
如果没学过导数,没关系,跟我来!
“增长速度”这个名词,现阶段我们可以理解为f(x+1)−f(x)的值,也就是x每增大1,f(x)的函数值所增大的值。
照这样理解,函数f(x)=x2的增长速度应该是:
(x+1)2−x2
=(x+1−x)(x+1+x) (平方差公式)
=2x+1
因此,如果x是一个很大的值,那么f(x+1)比f(x)多的值也会很大;反之,如果x是一个比较小的值,那么f(x+1)比f(x)多的值也会很小。
所以,x越大,此函数增长的就越快。
那这个结论和这道题有什么关系呢?关系大了!
我们现在要求出对于ai∈N+,且a1+a2+a3+⋯+ak−1+ak=n,为定值的时候a12+a22+a32+⋯+ak−12+ak2的最大值。
由之前的结论,我们知道,对于每一个ai2,都有ai越大,ai2增长的越快。
那么,我们完全可以使其中的一个数尽可能的大,其余的数尽可能地小啊!(比如其余的数都是1)
这样,我们就可以构造出最大值了。
证明如下:
假设此时a1=a2=a3=⋯=ak−2=ak−1=(一个很小的值),ak=(一个很大的值)
如果我们给a1,a2,…,ak−1中的任意一个数加上x,则由于a1+a2+a3+⋯+ak−1+ak=n,为定值,那么ak必须减去x。
假设给a1,a2,…,ak−1中的任意一个数加上x将会导致a12+a22+a32+⋯+ak−12+ak2增加p。
将ak减去x导致a12+a22+a32+⋯+ak−12+ak2减少q。
那么,由之前的结论,我们知道:p一定小于q!
这是因为a1,a2,…,ak−1中的任意一个数都远远小于ak,所以加上x后增长的值一定小于ak减去x之后减少的值。
所以代数式a12+a22+a32+⋯+ak−12+ak2增加了p又减少了q,减少的比增加的多,显然此时a12+a22+a32+⋯+ak−12+ak2变小了。
所以说仅有当a1=a2=a3=⋯=ak−2=ak−1=(一个很小的值),ak=(一个很大的值)的时候,原式有最大值。
在本题中就是a1=a2=a3=⋯=ak−2=ak−1=1,ak=n−k+1的时候,原式有最大值。
此时原式的值为:
2a12+a22+a32+⋯+ak−12+ak2−(a1+a2+a3+⋯+ak−1+ak)
=212+12+12+⋯+12+12k-1个12+(n−k+1)2−n
=2k−1−n+(n−k+1)2
=2(n−k+1)2−(n−k+1)
=2(n−k+1)(n−k)
(特别地,这里不需要取整,原因是n−k+1和n−k中必定有一个偶数。)
需要注意的是,我们需要特判n<k的情况。
至于代码,就不贴了,在明白了以上知识以后,写出一篇AC代码是很容易的啦~~
纯数学题贴什么代码啊(
The end