最大值:
n个人,其中m-1个队中只有一个人,剩下的人都放在一个组里
最小值:每一组的人数尽量平均
证明:最小值:令第i个team人数为xi, 则所求为.则
又: .故
整理得: ,当且仅当时,f取得最小值
所以当n整除m时,f取得最小值.
当n不整除m时,n % m部分有两种选择:
①给其中n % m个team每个team多加一个人;
②其中一只team多加n % m人
令r = n % m;方案1多出来的pair数为:
方案2多出来的pair数为:
① - ② = , 由于,故① - ② <= 0,则① <= ②
代码如下:
#include <cstdio>
using namespace std;
int main(){
long long m, n, min_val, max_val;
scanf("%I64d %I64d", &n, &m);
long long tmp = n / m;
long long rest = n % m;
min_val = tmp * (tmp - 1) / 2 * m + rest * tmp;
max_val = (n - m) * (n - m + 1) / 2;
printf("%I64d %I64d\n", min_val, max_val);
}