📜  m人n队中的最小和最大对数

📅  最后修改于: 2021-06-25 15:56:55             🧑  作者: Mango

n   准确归为一组的人m   团队,这样每个团队中至少要有一个人。团队的所有成员都是彼此的朋友。找到最小和最大编号。可以通过将这些朋友分组而形成的一对朋友n   人们正好进入m   团队。
例子:

解释:
首先,我们必须在每个团队中安排成员来满足约束条件。所以我们剩下n-m   人们。
1.最高编号对
可以看出,最大没有。配对只能通过将所有其余成员置于同一团队中来实现。可以解释如下:
考虑2个团队,其中一个包含x人,其他包含1个人,现在我们必须在两个团队中再增加1个人,将他/她添加到x个人的团队中会增加否。 x的对数,同时将他添加到另一支队伍中只会增加No。因此,最大数量为1。对,我们必须将所有其他人员放在同一个团队中。
现在,团队分配的最大数量。对将是这样的:
n-m+1, 1, 1, ...
因此,

    $$Max. pairs = \frac{(n-m)*(n-m+1)}{2} $$

例如:如果一个团队由3个人组成,则第三个人有1个和2个朋友,第二个人有1个作为朋友。因此,2 + 1 =((3-1)*(3))/ 2个朋友
2.最少编号对
现在,从相同的解释中可以看出,最小编号为。当所有人员在团队中平均分配时,可获得成对的。因此,应将剩余的nm个人分配给m个团队,以便每个团队包含(nm)/ m个人员。现在有(n-m)\%m   仍剩余的人数,每队要填补1人(与上述最高人数条件相反)。
现在,团队分配的最低人数。对将是这样的:
每个团队都有(n-m)/m + 1   成员和(n-m)\%m   团队多了一名成员。
所以总没有。的对数=每个大小为m个团队的对总数((n-m)/m)+1   +通过在中添加1人形成的对的数量(n-m)\%m   有规模的团队((n-m)/m)+1

    $$ Min. pairs = m*\frac{((n-m)/m+1)*((n-m)/m)}{2} + ceil((n-m)/m)*(n-m)\%m $$

C++
// CPP program to find minimum and maximum no. of pairs
#include 
using namespace std;
 
void MinimumMaximumPairs(int n, int m)
{
    int max_pairs = ((n - m + 1) * (n - m)) / 2;
 
    int min_pairs = m * (((n - m) / m + 1) * ((n - m) / m)) / 2 +
                    ceil((n - m) / double(m)) * ((n - m) % m);
 
    cout << "Minimum no. of pairs = " << min_pairs << "\n";
    cout << "Maximum no. of pairs = " << max_pairs << "\n";
}
 
// Driver code
int main()
{
    int n = 5, m = 2;
    MinimumMaximumPairs(n, m);
    return 0;
}


Java
//Java  program to find minimum
// and maximum no. of pairs
 
import java.io.*;
 
class GFG {
    static void MinimumMaximumPairs(int n, int m)
{
    int max_pairs = ((n - m + 1) * (n - m)) / 2;
 
    int min_pairs = m * (((n - m) / m + 1) * ((n - m) / m)) / 2 +
                        (int)Math.ceil((double)((n - m) /
                                        (double)(m))) * ((n - m) % m);
 
        System.out.println("Minimum no. of pairs = " + min_pairs);
        System.out.println("Maximum no. of pairs = " + max_pairs);
}
 
// Driver code
    public static void main (String[] args) {
 
    int n = 5, m = 2;
    MinimumMaximumPairs(n, m);
}
}
// This code is contributed by Sachin.


Python3
# Python3 program to find minimum
# and maximum no. of pairs
 
from math import ceil
 
def MinimumMaximumPairs(n, m) :
 
    max_pairs = ((n - m + 1) * (n - m)) // 2;
 
    min_pairs = (m * (((n - m) // m + 1) *
                      ((n - m) // m)) // 2 +
                  ceil((n - m) / (m)) *
                      ((n - m) % m))
 
    print("Minimum no. of pairs = ", min_pairs)
    print("Maximum no. of pairs = " , max_pairs)
 
# Driver code
if __name__ == "__main__" :
 
    n ,m= 5, 2
    MinimumMaximumPairs(n, m)
 
# This code is contributed by Ryuga


C#
// C# program to find minimum
// and maximum no. of pairs
using System;
class GFG
{
static void MinimumMaximumPairs(int n, int m)
{
    int max_pairs = ((n - m + 1) * (n - m)) / 2;
 
    int min_pairs = m * (((n - m) / m + 1) * ((n - m) / m)) / 2 +
                         (int)Math.Ceiling((double)((n - m) /
                                           (double)(m))) * ((n - m) % m);
 
    Console.WriteLine("Minimum no. of pairs = " + min_pairs);
    Console.WriteLine("Maximum no. of pairs = " + max_pairs);
}
 
// Driver code
public static void Main()
{
    int n = 5, m = 2;
    MinimumMaximumPairs(n, m);
}
}
 
// This code is contributed by Akanksha Rai


PHP


Javascript


输出

Minimum no. of pairs =  4
Maximum no. of pairs =  6

时间复杂度: O(1)