Number of ways to arrange 2*N persons on the two sides of a table with X and Y persons on opposite sides

Given three integers N, X and Y. The task is to find the number of ways to arrange 2*N persons along two sides of a table with N number of chairs on each side such that X persons are on one side and Y persons are on the opposite side.

Note: Both X and Y are less than or equals to N.

Examples:

Input : N = 5, X = 4, Y = 2
Output : 57600
Explanation :
The total number of person 10. X men on one side and Y on other side, then 10 – 4 – 2 = 4 persons are left. We can choose 5 – 4 = 1 of them on one side in 4\choose 1 ways and the remaining persons will automatically sit on the other side. On each side arrangement is done in 5! ways. The number of ways is 4\choose 1.5!5!

Input : N = 3, X = 1, Y = 2
Output : 108

Approach :
The total number of person 2*N. Let call both the sides as A and B. X men on side A and Y on side B, then 2*N – X – Y persons are left. We can choose N-X of them for side A in 2*N - X - Y\choose N-X ways and the remaining persons will automatically sit on the other side B. On each side arrangement is done in N! ways. The number of ways to arrange 2*N persons along two sides of a table is 2*N - X - Y\choose N-X.N!N!

Below is the implementation of the above approach :

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

#include <bits/stdc++.h>
using namespace std;
  
// Function to find factorial of a number
int factorial(int n)
{
    if (n <= 1)
        return 1;
    return n * factorial(n - 1);
}
  
// Function to find nCr
int nCr(int n, int r)
{
    return factorial(n) / (factorial(n - r) * factorial(r));
}
  
  
// Function to find the number of ways to arrange 2*N persons
int NumberOfWays(int n, int x, int y)
{
    return nCr(2*n-x-y, n-x) * factorial(n) * factorial(n); 
}
  
  
// Driver code
int main()
{
    int n = 5, x = 4, y = 2;
      
    // Function call
    cout << NumberOfWays(n, x, y);
      
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java implementation for the above approach
import java.util.*;
import java.lang.*;
import java.io.*;
  
class GFG
{
      
    // Function to returns factorial of n
    static int factorial(int n) 
    
        if (n <= 1
            return 1
        return n * factorial(n - 1); 
    
      
    // Function to find nCr 
    static int nCr(int n, int r) 
    
        return factorial(n) / (factorial(n - r) *
                               factorial(r)); 
    
      
    // Function to find the number of ways
    // to arrange 2*N persons 
    static int NumberOfWays(int n, int x, int y) 
    
        return nCr(2 * n - x - y, n - x) * 
               factorial(n) * factorial(n); 
    
      
    // Driver code
    public static void main (String[] args)
                  throws java.lang.Exception
    {
        int n = 5, x = 4, y = 2
          
        // Function call 
        System.out.println(NumberOfWays(n, x, y));         
    }
}
  
// This code is contributed by Nidhiva

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 implementation for the above approach
  
# Function to find factorial of a number
def factorial(n):
  
    if (n <= 1):
        return 1;
    return n * factorial(n - 1);
  
# Function to find nCr
def nCr(n, r):
  
    return (factorial(n) / 
           (factorial(n - r) * factorial(r)));
  
# Function to find the number of ways 
# to arrange 2*N persons
def NumberOfWays(n, x, y):
  
    return (nCr(2 * n - x - y, n - x) * 
            factorial(n) * factorial(n)); 
  
# Driver code
n, x, y = 5, 4, 2;
  
# Function call
print(int(NumberOfWays(n, x, y)));
  
# This code is contributed by PrinciRaj1992

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# implementation for the above approach
using System;
      
class GFG
{
      
    // Function to returns factorial of n
    static int factorial(int n) 
    
        if (n <= 1) 
            return 1; 
        return n * factorial(n - 1); 
    
      
    // Function to find nCr 
    static int nCr(int n, int r) 
    
        return factorial(n) / (factorial(n - r) *
                               factorial(r)); 
    
      
    // Function to find the number of ways
    // to arrange 2*N persons 
    static int NumberOfWays(int n, int x, int y) 
    
        return nCr(2 * n - x - y, n - x) * 
            factorial(n) * factorial(n); 
    
      
    // Driver code
    public static void Main(String[] args)
    {
        int n = 5, x = 4, y = 2; 
          
        // Function call 
        Console.WriteLine(NumberOfWays(n, x, y));         
    }
}
  
// This code is contributed by Princi Singh

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php 
// PHP implementation for the above approach
  
// Function to find factorial of a number 
function factorial($n
    if ($n <= 1) 
        return 1; 
    return $n * factorial($n - 1); 
  
// Function to find nCr 
function nCr($n, $r
    return factorial($n) / (factorial($n - $r) *
                            factorial($r)); 
  
// Function to find the number of ways 
// to arrange 2*N persons 
function NumberOfWays($n, $x, $y
    return nCr(2 * $n - $x - $y, $n - $x) * 
           factorial($n) * factorial($n); 
  
// Driver code 
$n = 5;
$x = 4;
$y = 2; 
  
// Function call 
echo (NumberOfWays($n, $x, $y)); 
  
// This code is contributed by Naman_garg. 
?> 

chevron_right


Output:

57600


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.