#include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; #define int long long #define double long double typedef vector VI; typedef pair pii; typedef vector VP; typedef vector VS; typedef priority_queue PQ; templatebool chmax(T &a, const T &b) { if (a < b) { a = b; return 1; } return 0; } templatebool chmin(T &a, const T &b) { if (b < a) { a = b; return 1; } return 0; } #define fore(i,a) for(auto &i:a) #define REP(i,n) for(int i=0;i, greater > q2; int N; int A[1010][1010]; VI X[1010], Y[1010]; int check(int t, int num) { int res = 0; REP(i, N) { int co = min(abs(X[num][i] - t), Y[num][i]); co += abs(abs(X[num][i] - t) - Y[num][i]); res += co; } //cout << t << " " << num << " " << res << endl; return res; } signed main() { cin.tie(0); ios::sync_with_stdio(false); cin >> N; REP(i, N)REP(j, N) { int a; cin >> a; a--; X[a].push_back(i); Y[a].push_back(j); } int ans = 0; REP(i, N) { int L = 0, R = N - 1; while (R - L > 2) { int t1 = (L * 2 + R) / 3; int t2 = (L + R * 2) / 3; if (check(t1,i) < check(t2,i)) R = t2; else L = t1; } ans += min({ check(L,i),check(L + 1,i), check(R,i) }); } cout << ans << endl; return 0; }