Tuesday, November 19, 2024
Google search engine
HomeData Modelling & AIMinimum number of operations on a binary string such that it gives...

Minimum number of operations on a binary string such that it gives 10^A as remainder when divided by 10^B

Given a binary string str of length N and two integers A and B such that 0 ? A < B < n. The task is to count the minimum number of operations on the string such that it gives 10A as remainder when divided by 10B. An operation means changing 1 to 0 or 0 to 1.

Examples: 

Input: str = “1001011001”, A = 3, B = 6 
Output:
The string after 2 operations is 1001001000. 
1001001000 % 106 = 103

Input: str = “11010100101”, A = 1, B = 5 
Output: 3  

Approach: In order for the number to give 10A as remainder when divided by 10B, the last B digits of the string has to be 0 except the digit at (A + 1)th position from the last which should be 1. Therefore, check the last B digits of the string for the above condition and increase the count by 1 for each mismatch of digit.

Below is the implementation of the above approach:  

C++




// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to return the minimum number
// of operations on a binary string such that
// it gives 10^A as remainder when divided by 10^B
int findCount(string s, int n, int a, int b)
{
    // Initialize result
    int res = 0;
 
    // Loop through last b digits
    for (int i = 0; i < b; i++) {
        if (i == a)
            res += (s[n - i - 1] != '1');
        else
            res += (s[n - i - 1] != '0');
    }
 
    return res;
}
 
// Driver code
int main()
{
    string str = "1001011001";
    int N = str.size();
    int A = 3, B = 6;
 
    cout << findCount(str, N, A, B);
 
    return 0;
}


Java




// Java implementation of the approach
import java.util.*;
 
class GFG
{
     
    // Function to return the minimum number
    // of operations on a binary string such that
    // it gives 10^A as remainder when divided by 10^B
    static int findCount(String s, int n, int a, int b)
    {
        // Initialize result
        int res = 0;
        char []s1 = s.toCharArray();
         
        // Loop through last b digits
        for (int i = 0; i < b; i++)
        {
             
            if (i == a)
            {
                if (s1[n - i - 1] != '1')
                    res += 1;
            }
            else
            {
                if (s1[n - i - 1] != '0')
                        res += 1 ;
            }
                 
        }
     
        return res;
    }
     
    // Driver code
    static public void main (String []args)
    {
         
        String str = "1001011001";
        int N = str.length() ;
        int A = 3, B = 6;
     
        System.out.println(findCount(str, N, A, B));
     
    }
}
 
// This code is contributed by ChitraNayal


Python3




# Python 3 implementation of the approach
 
# Function to return the minimum number
# of operations on a binary string such that
# it gives 10^A as remainder when divided by 10^B
def findCount(s, n, a, b):
    # Initialize result
    res = 0
 
    # Loop through last b digits
    for i in range(b):
        if (i == a):
            res += (s[n - i - 1] != '1')
        else:
            res += (s[n - i - 1] != '0')
 
    return res
 
# Driver code
if __name__ == '__main__':
    str = "1001011001"
    N = len(str)
    A = 3
    B = 6
 
    print(findCount(str, N, A, B))
 
# This code is contributed by
# Surendra_Gangwar


C#




// C# implementation of the approach
using System;
 
class GFG
{
     
    // Function to return the minimum number
    // of operations on a binary string such that
    // it gives 10^A as remainder when divided by 10^B
    static int findCount(string s, int n, int a, int b)
    {
        // Initialize result
        int res = 0;
     
        // Loop through last b digits
        for (int i = 0; i < b; i++)
        {
             
            if (i == a)
            {
                if (s[n - i - 1] != '1')
                    res += 1;
            }
            else
            {
                if (s[n - i - 1] != '0')
                        res += 1 ;
            }
                 
        }
     
        return res;
    }
     
    // Driver code
    static public void Main ()
    {
         
        string str = "1001011001";
        int N = str.Length ;
        int A = 3, B = 6;
     
        Console.WriteLine(findCount(str, N, A, B));
     
    }
}
 
// This code is contributed by AnkitRai01


Javascript




<script>
 
// Javascript implementation of the approach
 
// Function to return the minimum number
// of operations on a binary string such that
// it gives 10^A as remainder when divided by 10^B
function findCount(s, n, a, b)
{
     
    // Initialize result
    var res = 0;
 
    // Loop through last b digits
    for(var i = 0; i < b; i++)
    {
        if (i == a)
            res += (s[n - i - 1] != '1');
        else
            res += (s[n - i - 1] != '0');
    }
    return res;
}
 
// Driver code
var str = "1001011001";
var N = str.length;
var A = 3, B = 6;
 
document.write(findCount(str, N, A, B));
 
// This code is contributed by itsok
 
</script>


Output: 

2

 

Time Complexity: O(N )

Auxiliary Space: O(1)

Feeling lost in the world of random DSA topics, wasting time without progress? It’s time for a change! Join our DSA course, where we’ll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

Last Updated :
30 May, 2022
Like Article
Save Article


Previous

<!–

8 Min Read | Java

–>


Next


<!–

8 Min Read | Java

–>

RELATED ARTICLES

Most Popular

Recent Comments