HackerEarth Mosaics and holes problem solution YASH PAL, 31 July 2024 In this HackerEarth Coprimes problem solution, John wants to cover his yard floor with mosaics. The yard floor is a n x m matrix and each cell is either a mosaic or a hole. John has invented the flipper machine. This machine has a size of k and can select a k x k square of the yard and flip the cells in it. By this action, every hole in the square becomes a mosaic and every mosaic in the square becomes a hole. It is illustrated by the following example: The 2 x 2 square on the left has been flipped to the right one by the flipper with the size 2 and blacks are holes and whites are mosaics. Help John to cover the floor of the yard completely by mosaics by using this machine. In each step, John selects a k x k square of the yard floor and sets the machine on it. He wants to compute the minimum steps needed to repair the yard floor. HackerEarth Mosaics and holes problem solution. #include<bits/stdc++.h>using namespace std;const int M=1e3+10;int ans,a[M][M],b[M][M],n,m,k;void prt()//used for debug{ cout<<"a: "<<endl; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) cout<<a[i][j]<<" "; cout<<endl; } cout<<"b: "<<endl; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) cout<<b[i][j]<<" "; cout<<endl; } cout<<endl;}int32_t main(){ cin>>n>>m>>k; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) scanf("%d",&a[i][j]); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { a[i][j]^=b[i][j]; b[i+1][j]^=b[i][j]; b[i][j+1]^=b[i][j]; b[i+1][j+1]^=b[i][j]; if(a[i][j]==0 && i+k-1<=n && j+k-1<=m) { ans++; a[i][j]^=1; b[i+1][j]^=1; b[i][j+1]^=1; b[i+1][j+1]^=1; b[i+k][j]^=1; b[i][j+k]^=1; b[i+k][j+k]^=1; } else if(a[i][j]==0) return cout<<-1<<endl,0; //prt(); } cout<<ans<<endl; return 0;} Second solution #include<bits/stdc++.h>using namespace std;const int maxn = 1000 + 10;bool b[maxn][maxn];bool ps[maxn][maxn];bool ar[maxn][maxn];int main(){ int n, m, k; cin >> n >> m >> k; for(int i = 1; i <= n; i++) for(int j = 1; j <= m; j++) cin >> b[i][j]; int ans = 0; for(int i = 1; i <= n; i++) for(int j = 1; j <= m; j++){ ps[i][j] = ps[i - 1][j - 1] ^ ps[i][j] ^ ps[i - 1][j] ^ ps[i][j - 1]; if(ps[i][j] == b[i][j]){ if(i + k > n + 1 || j + k > m + 1) return cout << -1 << endl , 0; ps[i][j] ^= 1; ps[i + k][j] ^= 1; ps[i][j + k] ^= 1; ps[i + k][j + k] ^= 1; ans++; } } cout << ans << endl;} coding problems