Open In App

Minimum size binary string required such that probability of deleting two 1’s at random is 1/X

Given a value X, the task is to find a minimum size binary string, such that if any 2 characters are deleted at random, the probability that both the characters will be ‘1’ is 1/X. Print the size of such binary string.


Example:

Input: X = 2 
Output:
Explanation: 
Let the binary string be “0111”. 
Probability of choosing 2 1s from given string is = 3C2 / 4C2 = 3/6 = 1/2 (which is equal to 1/X). 
Hence, the required size is 4. 
(Any 4 size binary string with 3 ‘1’s and 1 ‘0’ can be taken for this example).
Input: X = 8 
Output:

Approach: We will try to find a formula to solve this problem.  

Let 
r = Number of 1’s in the string 
and 
b = Number of 0’s in the string.

 Total number of ways = (r + b) C 2. 

For Example: if X = 2
 


 

Hence, r = 3 and b = 1
P(both character are 1’s) = 3C2 / 4C2 = 2/4 = 1/2 


Below is the implementation of the above approach.

// C++ implementation of the
// above approach
 
#include <bits/stdc++.h>
using namespace std;
 
// Function returns the minimum
// size of the string
int MinimumString(int x)
{
    // From formula
    int b = 1;
 
    // Left limit of r
    double left_lim = sqrt(x) + 1.0;
 
    // Right limit of r
    double right_lim = sqrt(x) + 2.0;
 
    int r;
    for (int i = left_lim; i <= right_lim; i++) {
        if (i > left_lim and i < right_lim) {
            // Smallest integer in
            // the valid range
            r = i;
            break;
        }
    }
 
    return b + r;
}
 
// Driver Code
int main()
{
 
    int X = 2;
    cout << MinimumString(X);
    return 0;
}

                    
// Java implementation of the
// above approach
import java.util.*;
 
class GFG{
 
// Function returns the minimum
// size of the String
static int MinimumString(int x)
{
     
    // From formula
    int b = 1;
 
    // Left limit of r
    double left_lim = Math.sqrt(x) + 1.0;
 
    // Right limit of r
    double right_lim = Math.sqrt(x) + 2.0;
 
    int r = 0;
    for(int i = (int)left_lim; i <= right_lim; i++)
    {
        if (i > left_lim && i < right_lim)
        {
             
            // Smallest integer in
            // the valid range
            r = i;
            break;
        }
    }
    return b + r;
}
 
// Driver Code
public static void main(String[] args)
{
    int X = 2;
    System.out.print(MinimumString(X));
}
}
 
// This code is contributed by PrinciRaj1992

                    
# Python3 implementation of
# the above approach
from math import sqrt
 
# Function returns the minimum
# size of the string
def MinimumString(x):
 
    # From formula
    b = 1
 
    # Left limit of r
    left_lim = sqrt(x) + 1.0
 
    # Right limit of r
    right_lim = sqrt(x) + 2.0
 
    for i in range(int(left_lim),
                   int(right_lim) + 1):
        if(i > left_lim and i < right_lim):
             
            # Smallest integer in
            # the valid range
            r = i
            break
 
    return b + r
 
# Driver Code
if __name__ == '__main__':
 
    X = 2
 
    print(MinimumString(X))
 
# This code is contributed by Shivam Singh

                    
// C# implementation of the
// above approach
using System;
 
class GFG{
 
// Function returns the minimum
// size of the String
static int MinimumString(int x)
{
     
    // From formula
    int b = 1;
 
    // Left limit of r
    double left_lim = Math.Sqrt(x) + 1.0;
 
    // Right limit of r
    double right_lim = Math.Sqrt(x) + 2.0;
 
    int r = 0;
    for(int i = (int)left_lim; i <= right_lim; i++)
    {
        if (i > left_lim && i < right_lim)
        {
             
            // Smallest integer in
            // the valid range
            r = i;
            break;
        }
    }
    return b + r;
}
 
// Driver Code
public static void Main(String[] args)
{
    int X = 2;
     
    Console.Write(MinimumString(X));
}
}
 
// This code is contributed by gauravrajput1

                    
<script>
 
// Javascript program for
// the above approach
    
// Function returns the minimum
// size of the String
function MinimumString(x)
{
       
    // From formula
    let b = 1;
   
    // Left limit of r
    let left_lim = Math.sqrt(x) + 1.0;
   
    // Right limit of r
    let right_lim = Math.sqrt(x) + 2.0;
   
    let r = 0;
    for(let i = Math.floor(left_lim); i <= Math.floor(right_lim); i++)
    {
        if (i > left_lim && i < right_lim)
        {
               
            // Smallest integer in
            // the valid range
            r = i;
            break;
        }
    }
    return b + r;
}
     
// Driver Code
     
     let  X = 2;
    document.write(MinimumString(X));
 
</script>

                    

Output: 
4

 

Time Complexity: O(1), as the difference between left_lim and right_lim will be always less than 1. 
Auxiliary Space: O(1)
 


Article Tags :