Pagini recente » Cod sursa (job #1457017) | Cod sursa (job #2027956) | Borderou de evaluare (job #821000) | Cod sursa (job #2164355) | Cod sursa (job #3232795)
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
using i64 = int64_t;
i64 n;
vector<vector<i64>> v;
i64 solve(i64 m, i64 id) {
i64 last = m;
i64 res = abs(v[0][id] - m);
for (i64 i = 1; i < n; i++) {
res += abs(last - v[i][id]) + 1;
last++;
}
return res;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
// #ifdef LOCAL
ifstream cin{"inundatii.in"};
ofstream cout{"inundatii.out"};
// #endif
cin >> n;
i64 x, y, z;
v.assign(n, {0, 0, 0});
i64 mi = 1e9;
i64 mx = -1;
for (i64 i = 0; i < n; i++) {
cin >> x >> y >> z;
v[i] = {x, y, z};
mi = min(mi, min(x, min(y, z)));
mx = max(mx, max(x, max(y, z)));
}
i64 res = 0;
for (i64 j = 0; j < 3; j++) {
// ternary search
i64 l = mi - 1;
i64 r = mx + 1;
while (r - l < 3) {
i64 m1 = l + (r - l) / 3;
i64 m2 = r - (r - l) / 3;
i64 v1 = solve(m1, j);
i64 v2 = solve(m2, j);
if (v1 > v2) {
l = m1;
} else {
r = m2;
}
}
i64 idk = 1e9;
for (int i = l; i <= r; i++) {
idk = min(idk, solve(i, j));
}
res += idk;
}
cout << res;
return 0;
}