fork download
  1. #include <iostream>
  2. #include <queue>
  3. #include <stack>
  4. #include <vector>
  5. #include <climits>
  6. #include <algorithm>
  7. using namespace std;
  8. bool origarr[25][25], newarr[25][25];
  9.  
  10. int main() {
  11. int t, n, m, dr, dc, merr, err;
  12. char c;
  13. cin >> t;
  14. while (t--) {
  15. cin >> n >> m;
  16. for (int i = 0; i < n; i++) {
  17. for (int j = 0; j < m; j++) {
  18. cin >> c;
  19. origarr[i][j] = c - '0';
  20. }
  21. }
  22.  
  23. for (int i = 0; i < n; i++) {
  24. for (int j = 0; j < m; j++) {
  25. cin >> c;
  26. newarr[i][j] = c - '0';
  27. }
  28. }
  29.  
  30.  
  31. merr = INT_MAX;
  32. for (int dr = -(n-1); dr < n; dr++) {
  33. for (int dc = -(m-1); dc < m; dc++) {
  34. err = 0;
  35. //Calculate error for dr and dc offset
  36. for (int i = 0; i < n; i++) {
  37. for (int j = 0; j < m; j++) {
  38. //If the translated new arr and original matrix have a difference add to error
  39. if (i+dr >= 0 && i+dr < n && j+dc >= 0 && j+dc < m) {
  40. err += abs(origarr[i][j] - newarr[i+dr][j+dc]);
  41. }
  42. //If original matrix has 1, but no valid translation from new matrix
  43. // e.g if the new matrix is translated up by 1 row so there is no entry for last row
  44. // But original matrix has 1's in last row
  45. else if (origarr[i][j] == 1) {
  46. err++;
  47. }
  48. }
  49. }
  50. merr = min(merr, err);
  51. }
  52. }
  53.  
  54. cout << merr << endl;
  55. }
  56. return 0;
  57. }
  58.  
Success #stdin #stdout 0s 4304KB
stdin
5
3 3
100
010
000
000
010
001
4 4
0000
0110
0000
0011
1100
0000
1100
0000
3 3
100
000
001
000
010
000
3 3
000
010
000
100
000
001
3 3
111
000
000
001
001
001
stdout
0
2
1
0
2