题目链接:http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id=55182
题意:
n个人分为m队参加比赛,每个队伍至少1人。比赛结束后,位于同一队伍的两两队员会成为朋友。你的任务是计算出比赛后最多会产生多少对朋友以及最少会产生多少对朋友。
案例:
Sample Input
Input
5 1
Output
10 10
Input
3 2
Output
1 1
Input
6 3
Output
3 6
分析:
有关组合数C[n][m]问题,该题n未知,m已经固定为2,即从n人中选出2人成为朋友的组合数。
先对题目分析最多和最少可以产生多少对朋友,经规律查找,发现产生朋友对数最多的情况为为m-1个队伍各分配一人,其余人集中于一个队伍。而最少的情况是平均分配,比如13人分配给5支队伍,首先每支队伍分配2人,剩余3人再平均分配给其中3支队伍。
接着也就是计算了,对于每支人数大于2(即可以产生朋友对)的队伍进行计算(采用组合数方式),再求和即为解。
源代码:
1 #include<cstdio> 2 #include<cstring> 3 int n,m,maxk,mink; 4 int main() 5 { 6 scanf("%d%d",&n,&m); 7 int k=n-m; 8 maxk=(k+1)*k/2;//求解化简式 9 int s=k/m,t=k%m; 10 mink=(2*t+m*s)*(s+1)/2;//求解化简式 11 printf("%d %d ",mink,maxk); 12 return 0; 13 }