Skip to content
Related Articles

Related Articles

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

View Discussion
Improve Article
Save Article
  • Last Updated : 31 Mar, 2021

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++




#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;
}

Java




// 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

Python3




# 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

C#




// 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

PHP




<?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.
?>

Javascript




<script>
 
// JavaScript implementation for the above approach
// Function to returns factorial of n
    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
     
        var n = 5, x = 4, y = 2;
 
        // Function call
        document.write(NumberOfWays(n, x, y));
 
// This code contributed by Rajput-Ji
 
</script>

Output: 

57600

 


My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!