• Random Teams


    题目链接: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 }
  • 相关阅读:
    <form:select>的使用
    存储过程-删除、新建索引
    java 反射常用总结
    java判断是否是数字
    jquery遍历数组添加行删除行
    oracle常用sql
    cxf (zhuan)
    linux 常用命令--个人小结一
    java发送邮件
    socket和webservice特点
  • 原文地址:https://www.cnblogs.com/huaszjh/p/4749094.html
Copyright © 2020-2023  润新知