Editorial for Exactly Increasing Grid


Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.

Submitting an official solution before solving the problem yourself is a bannable offence.

Türkçe

Problemde verilen ızgaradaki tüm \(\mathbf{GRID_{(i, j)}}\) değerleri için, \(\mathbf{GRID_{(i, j)}}\) değeri en sol üstteki değer \(\mathbf{GRID_{(0, 0)}} \neq \mathbf{GRID_{(i, j)} - i - j}\) olduğu sürece değişmeli. Bunun için her \(\mathbf{(i, j)}\) konumu için \(\mathbf{GRID_{(0, 0)}}\) noktasının olması gereken bir değer var. Çözüm için \(\mathbf{GRID_{(0, 0)}}\)'ın olabileceği her değer için verilen ızgarada kaç adet değerin değişmediğini buluyoruz. Değişmeyenlerin sayılarının en büyüğünü gridde kaç tane eleman olduğundan çıkarırsak cevabı buluyoruz.

English

For each value \(\mathbf{GRID_{(i, j)}}\) on the given grid, \(\mathbf{GRID_{(i, j)}}\) will be changed if the value on the top left corner \(\mathbf{GRID_{(0, 0)}} \neq \mathbf{GRID_{(i, j)} - i - j}\). So there is a corresponding value \(\mathbf{GRID_{(0, 0)}}\) should have for each \(\mathbf{(i, j)}\) location on the grid. For the solution we calculate the number of cells that won't be changed for each of the value \(\mathbf{GRID_{(0, 0)}}\) can have. We find the answer by subtracting the maximum number of unchanged values for any \(\mathbf{GRID_{(0, 0)}}\) value.

N, M = map(int, input().strip().split(" "))
grid = []

for i in range(N):
    grid.append(list(input().strip().split(" ")))

counts = {}
for i in range(N):
    for j in range(M):
        key = int(grid[i][j]) - (i+j)
        counts[key] = counts.get(key, 0) + 1

print(N*M - max(counts.values()))