Cod sursa(job #3232759)

Utilizator iulia_morariuIulia Morariu iulia_morariu Data 1 iunie 2024 11:54:46
Problema Inundatii Scor 40
Compilator cpp-64 Status done
Runda Simulare E4 #1 Marime 1.66 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <bits/stdc++.h>
#define ll long long

using namespace std;

ifstream fin("inundatii.in");
ofstream fout("inundatii.out");

signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int n; fin >> n;
    ll c1[n], c2[n], c3[n];

    for(int i = 0; i < n; i++){
        fin >> c1[i] >> c2[i] >> c3[i];
    }

    ll min1 = LLONG_MAX, min2 = LLONG_MAX, min3 = LLONG_MAX;
    ll c[n];
    for(int i = 0; i < n; i++){
        c[i] = c1[i];
        for(int j = i - 1; j >= 0; j--) c[j] = min(c[j + 1] - 1, c1[j]);
        for(int j = i + 1; j < n; j++) c[j] = max(c[j - 1] + 1, c1[j]);

        /*cout << "i = " << i << " c : ";
        for(int j = 0; j < n; j++) cout << c[j] << " ";
        cout << '\n';*/

        ll cost = 0;
        for(int j = 0; j < n; j++) cost += abs(c[j] - c1[j]);
        min1 = min(min1, cost);
    }

    for(int i = 0; i < n; i++){
        c[i] = c2[i];
        for(int j = i - 1; j >= 0; j--) c[j] = min(c[j + 1] - 1, c2[j]);
        for(int j = i + 1; j < n; j++) c[j] = max(c[j - 1] + 1, c2[j]);

        ll cost = 0;
        for(int j = 0; j < n; j++) cost += abs(c[j] - c2[j]);
        min2 = min(min2, cost);
    }

    for(int i = 0; i < n; i++){
        c[i] = c3[i];
        for(int j = i - 1; j >= 0; j--) c[j] = min(c[j + 1] - 1, c3[j]);
        for(int j = i + 1; j < n; j++) c[j] = max(c[j - 1] + 1, c3[j]);

        ll cost = 0;
        for(int j = 0; j < n; j++) cost += abs(c[j] - c3[j]);
        min3 = min(min3, cost);
    }
    //cout << "min1 = " << min1 << " min2 = " << min2 << " min3 = " << min3 << '\n';

    fout << min1 + min2 + min3 << '\n';

    return 0;
}