zoukankan      html  css  js  c++  java
  • B. Random Teams(数学题)

    题意:有n个人要被分到m个队伍中,组成一个队伍中的人,每两个人会成为一对朋友,求最多和最少有几对朋友。

    题解:一个组里的朋友对数,用排列组合来计算,我们发现基数越大的,朋友数会成倍增加,所以,最大的朋友数就是让人尽可能的都在一个队伍中,这样产生的朋友数是最大的。最小,当然就是让计数尽可能的小。我们分为两种:如果人数刚好平分,那么此时就是最大;但是如果无法整除,我们就应该将多余的人,按每队最多一人,分给m个队伍,这样达到的结果是最小的。

    ACcode:

    ll f(ll x)
    {
        if (x % 2 == 0)
            return x / 2 * (x - 1);
        else return (x - 1) / 2 * x;//排列组合的计算
    }
    int main()
    {
        ll n, m;
        ll minn, maxx;
        cin >> n >> m;
        maxx = f(n - m + 1);//最大值就是满足每队至少一人,把剩下人集中在一个队伍中
        minn = (m-(n%m))*f(n/m) + f(n/m+1)*(n%m);//+号前面是计算有多少不用分配到余数的队伍的朋友数,后面是计算加入人的队伍朋友数。
        cout << minn << " " << maxx;
        return 0;
    }
  • 相关阅读:
    GitHub 实现多人协同提交代码并且权限分组管理
    前端第一篇文章-http标准
    介绍Android电量
    音频编码格式
    PPT
    Word
    HTML 之 JavaScript
    HTML 之 CSS
    HTML 之 HTTP 协议(请求协议以及响应协议)
    HTML 之 标签
  • 原文地址:https://www.cnblogs.com/Uiney117/p/15124502.html
Copyright © 2011-2022 走看看