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

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;
  
// Function to return the 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;
}

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python 3 implementation of the approach
  
# Function to return the 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

chevron_right


Output:

2


My Personal Notes arrow_drop_up

Coder Machine Learner Social Activist Vocalist

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.



Improved By : SURENDRA_GANGWAR