Codeforces478 B. Random Teams(数学)

题意:

将N个人分成M组,每组至少一人,在比赛结束时,同一组的人两两之间都会成为朋友,
不同分组的分组方案得到的朋友对数不同。
你的任务是求出最小和最大的朋友对数。

数据范围:m<=n<=1e9

解法:

ma:(m-1)组只有一个人,剩下一组n-(m-1)个人

mi:
平均分成m组即可

code:

#include 
#define int long long
using namespace std;

signed main(){
    ios::sync_with_stdio(0);
    int n,m;cin>>n>>m;
    int ma=0,mi=0;
    int t=n-(m-1);
    ma=t*(t-1)/2;
    t=n/m;
    int tt=n%m;
    mi=t*(t-1)/2*(m-tt);
    mi+=t*(t+1)/2*tt;
    cout<<mi<<' '<<ma<<endl;
    return 0;
}

你可能感兴趣的:(Codeforces478 B. Random Teams(数学))