n参赛者以某种方式分成 m组,每组至少有一名参赛者。比赛结束后,每支来自同一队的参赛者都成为朋友。
你的任务是编写一个程序,该程序将查找比赛结束时可能形成的最少和最多成对朋友。
输入输入的唯一行包含两个整数Ñ和米,由单个空格分隔(1≤ 米 ≤ Ñ ≤10 9) -参与者的数目和团队的分别的数目。
产量输出中唯一的一行应该包含两个整数k min和k max--朋友对的最小可能数量和朋友对的最大可能数量。
例子5 1
10 10
3 2
1 1
6 3
3 6
在第一个样本中,所有参与者都进入一个团队,所以会有十对朋友。
在第二个样本中,任何可能的安排中,一个队总是有两个参与者,另一个队总是有一个参与者。因此,朋友对的数量总是等于1。
在新形成的友谊,如果参加者上组成的队分裂可以实现的第三样本最小数目2人,如果参加者上的队分裂能够实现最大数目的1,1和4的人
#include <iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int main()
{
long long int a,b,c,maxx,minn,n;
scanf("%lld%lld",&a,&b);
if(b!=1)
{
c=a%b;
if(c==0)
{
n=a/b;
if(n!=1)
{
minn=n*0.5*(n-1)*b;
maxx=(a-b+1)*0.5*(a-b);
}
else
{
minn=0;
maxx=0;
}
}
else
{
n=a/b;
if(n!=1)
{
long long int ge;
ge=a-n*b;
minn=(a/b+1)*0.5*(a/b)*ge+(b-ge)*(n)*0.5*(n-1);
maxx=(a-b+1)*0.5*(a-b);
}
else
{
maxx=(a-b+1)*0.5*(a-b);
long long int ge;
ge=a-n*b;
minn=ge;
}
}
}
else
{
minn=a*0.5*(a-1);
maxx=minn;
}
printf("%lld %lld\n",minn,maxx);
}