Cod sursa(job #3232795)

Utilizator rockoanaOana Pasca rockoana Data 1 iunie 2024 13:48:59
Problema Inundatii Scor 0
Compilator cpp-64 Status done
Runda Simulare E4 #1 Marime 1.16 kb
#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;
}