添加链接描述 n个人分成m组 然后求最大和最小的朋友数
最大的朋友数就是一个组分n-m+1个人,其他组一个人,这样求和公式可以得到最多的朋友
最少的朋友数就是平均分组,然后如果不整除说明有n%m个组是多一个人,其他都是平分,求和公式累加即可
#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef long long ll;
signed main(){
int n,m;
cin>>n>>m;
int mx=n-m+1;
mx=(mx-1)*mx/2;
mx=max(0ll,mx);
int mi=n/m;
int p=n%m;
int ex=(mi-1)*mi/2;
ex=max(0ll,ex);
if(n>m&&n%m)mi++;
mi=(mi-1)*mi/2;
mi*=p;
mi+=(m-p)*ex;
mi=max(0ll,mi);
cout<<mi<<" "<<mx<<endl;
return 0;
}
#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef long long ll;
signed main(){
int n,m;
cin>>n>>m;
int mx=n-m+1;
mx=(mx-1)*mx/2;
mx=max(0ll,mx);
int mi,a=n/m;
mi=a*(a-1)/2*(m-n%m)+(a*(a+1)/2)*(n%m);
cout<<mi<<" "<<mx<<endl;
return 0;
}
|