# Find number of transformation to make two Matrix Equal in C++

In this problem, we are given two matrices mat1[][] and mat2[][] of the same size. Our task is to find the number of transformations to make two Matrices Equal.

The transformation one matrices are −

• Select any matrix of the two matrices.

• Select a row or column from the matrices

• Add 1 to all elements of the selected row or column.

Let’s take an example to understand the problem,

## Input

mat1[][] = {{1 2}
{2 1}}
mat1[][] = {{2 3}
{4 3}}

## Output

3

## Explanation

1 2 => 2 2 => 2 3 => 2 3
2 1 => 3 1 => 3 2 => 4 3

## Solution Approach

A simple solution to the problem is by finding whether transformation is possible or not. For this, we need to check −

if( mat[i][j] - mat[i] - mat[j] + mat != 0 )

Then no solution exists.

Now, if transformation is possible, we will count transformations for rows and columns.

Program to illustrate the working of our solution,

## Example

Live Demo

#include <bits/stdc++.h>
using namespace std;
const int MAX = 100;
int countTransformationReq(int mat1[][MAX], int mat2[][MAX],
int m, int n) {
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
mat1[i][j] -= mat2[i][j];
for (int i = 1; i < n; i++)
for (int j = 1; j < m; j++)
if (mat1[i][j] - mat1[i] - mat1[j] +
mat1 != 0)
return -1;
int trxCount = 0;
for (int i = 0; i < n; i++)
trxCount += abs(mat1[i]);
for (int j = 0; j < m; j++)
trxCount += abs(mat1[j] - mat1);
return (trxCount);
}
int main() {
int mat1[MAX][MAX] = { {1, 2}, {2, 1}};
int mat2[MAX][MAX] = { {2, 3}, {4, 3}};
cout<<"The number of transformation to make the teo
maxtrces equal are "<<countTransformationReq(mat1, mat2, 2,
2) ;
return 0;
}

## Output

The number of transformation to make the teo maxtrces equal are 3

## Efficient approach

A more effective solution to the problem is by using the handshake formula.

We will create a temp[] array to count the occurrence of 0 and 1 in the modulo of the array. And then return the count value.

Program to illustrate the working of our solution,

## Example

Live Demo

#include<iostream>
using namespace std;
int countEvenSumSubArray(int arr[], int n){
int temp = {1, 0};
int count = 0, sum = 0;
for (int i=0; i<=n-1; i++){
sum = ( (sum + arr[i]) % 2 + 2) % 2;
temp[sum]++;
}
count += (temp*(temp-1)/2);
count += (temp*(temp-1)/2);
return (count);
}
int main(){
int arr[] = {2, 1, 4, 2};
int n = sizeof (arr) / sizeof (arr);
cout<<"The count of Subarrays with even sum is "<<countEvenSumSubArray(arr, n);
return (0);
}

## Output

The count of Subarrays with even sum is 4