B. Random Teams【1300 / 组合数学】

B. Random Teams【1300 / 组合数学】_第1张图片
https://codeforces.com/problemset/problem/478/B

#include
using namespace std;
typedef long long int LL;
LL n,m;
LL get1(LL n,LL m)//最小 尽量的均分 
{
	LL b=n/m;
	if(n%m)//不可以平均分 
	{
		int temp=n-b*m;
		LL sum=0;
		for(int i=1;i<=m;i++)
		{
			if(temp) sum+=(b+1)*b/2,temp--;
			else sum+=b*(b-1)/2;
		}
		return sum;
	}else//可以平均分 
	{
		return m*b*(b-1)/2;
	}
}
LL get2(LL n,LL m)//最大: 只有一个队人数最多,其它的队人都只要1个 
{
	n=n-(m-1);
	return n*(n-1)/2;
}
int main(void)
{
	cin>>n>>m;
	LL minv=get1(n,m);
	LL maxv=get2(n,m);
	cout<<minv<<" "<<maxv<<endl;
}

你可能感兴趣的:(数论,c++,算法)