题解:CF478B Random Teams
我们先来看最小值。
有点类似于找次品一类问题的思想,让每一组人数尽可能平均,可以得到最小值。
然后再来看最大值。
手推几组数据可以发现,当某一组人数越多时答案会越大。所以我们可以把前
AC Code
#include <bits/stdc++.h>
using namespace std;
long long n, m;
long long f(long long x) {
return x * (x - 1) / 2;
}
int main() {
cin >> n >> m;
if (n < m) {
cout << 0 << " " << 0 << endl;
return 0;
}
long long k = n % m;
cout << k * f(n / m + 1) + (m - k) * f(n / m) << " " << f(n - m + 1) << endl;
return 0;
}