太阳王的安排
题号:NC21446
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 32 M,其他语言64 M
64bit IO Format: %lld

题目描述

太阳王葛温在结束了古龙的时代后,建立了亚诺尔隆德,然而数量众多的银骑士如何安置让他有些心烦。在某次用阳光枪打猎古龙之后,葛温想到了办法,他在亚诺尔隆德中开辟了一大片地方用来当作银骑士的居所,但是由于事务繁忙,他只好把工作安排给他的儿子——太阳长男手里,并嘱咐他尽快安排好,不然把他发配去天天猎古龙。你能帮帮太阳长男吗?

你可以把可安置区域看做一条一维坐标轴(从原点0开始到正无穷),在坐标值为整数的点上可以安排m个银骑士,但因为条件所限,可以安置银骑士的位置只有n个。由于银骑士们荣誉感太强,如果他们住的太近,就会展开决斗,试图割下对方的耳朵。所以你要让每个银骑士之间的最小距离尽可能地大来避免发生冲突。

输入描述:

第一行为一个正整数T,代表数据组数。对于每组数据,第一行有两个整数n和m(2<=n<=100000,2<=m<=n)。n代表可以安置区域的数量,m代表需要被安置的银骑士数量。接下来的n行中,每一行有一个非负整数ai(ai<=10^9),表示可以安置区域的位置。

输出描述:

输出一个整数,为把所有银骑士全部安排好后,他们之间的最小距离最大值。
示例1

输入

复制
1
5 3
1
2
8
4
9

输出

复制
3

说明

对于样例,你可以把3个银骑士分别安置在1、4、8的位置上,这样他们之间的最小距离为3。其他的安排方案,他们之间的最小距离都小于等于3,所以3是最大的最小距离