using
System;
using
System.Collections.Generic;
class
GFG {
static
int
minOperations(
int
n,
int
m,
int
k,
List<List<
int
> > matrix)
{
List<
int
> arr =
new
List<
int
>();
int
mod;
if
(matrix[0][0] < 0) {
mod = k - (Math.Abs(matrix[0][0]) % k);
}
else
{
mod = matrix[0][0] % k;
}
for
(
int
i = 0; i < n; ++i) {
for
(
int
j = 0; j < m; ++j) {
arr.Add(matrix[i][j]);
int
val = matrix[i][j];
if
(val < 0) {
int
res = k - (Math.Abs(val) % k);
if
(res != mod) {
return
-1;
}
}
else
{
int
foo = matrix[i][j];
if
(foo % k != mod) {
return
-1;
}
}
}
}
arr.Sort();
int
median = arr[(n * m) / 2];
int
minOperations = 0;
for
(
int
i = 0; i < n * m; ++i)
minOperations += Math.Abs(arr[i] - median) / k;
if
((n * m) % 2 == 0) {
int
median2 = arr[((n * m) / 2) - 1];
int
minOperations2 = 0;
for
(
int
i = 0; i < n * m; ++i)
minOperations2
+= Math.Abs(arr[i] - median2) / k;
minOperations
= Math.Min(minOperations, minOperations2);
}
return
minOperations;
}
static
void
Main()
{
List<List<
int
> > matrix =
new
List<List<
int
> >{
new
List<
int
>{ 2, 4, 6 },
new
List<
int
>{ 8, 10, 12 },
new
List<
int
>{ 14, 16, 18 },
new
List<
int
>{ 20, 22, 24 },
};
int
n = matrix.Count;
int
m = matrix[0].Count;
int
k = 2;
Console.Write(minOperations(n, m, k, matrix));
}
}