Codeforces478 B. Random Teams(数学)

题意:

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

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

解法:

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

mi:
平均分成m组即可

code:

#include <bits/stdc++.h>
#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;
}

猜你喜欢

转载自blog.csdn.net/weixin_44178736/article/details/114165596