Cod sursa(job #2630646)

Utilizator Senth30Denis-Florin Cringanu Senth30 Data 26 iunie 2020 16:13:15
Problema Reuniune Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.04 kb
#include <bits/stdc++.h>
#define MAX 131072
#define MOD 1000000007

using namespace std;
const int INF = (int)2100000000;

int v[9][5];
long long aria, per, tempAria, tempPer;

void reun(int i, int j, int k){
    if(v[i][2] >= v[j][2] && v[i][4] <= v[j][4]){
        v[k][2] = v[j][2];
        v[k][4] = v[j][4];
    } else if(v[i][4] < v[j][2] && v[i][2] >= v[j][2]){
        v[k][2] = v[j][2];
        v[k][4] = v[i][4];
    } else if(v[i][2] <= v[j][2] && v[i][4] <= v[j][4]){
        v[k][2] = v[i][2];
        v[k][4] = v[j][4];
    } else if(v[i][2] <= v[j][2] && v[i][4] >= v[j][4]){
        v[k][2] = v[i][2];
        v[k][4] = v[i][4];
    }

    if(v[i][1] <= v[j][1] && v[j][3] <= v[i][3]){
        v[k][1] = v[j][1];
        v[k][3] = v[j][3];
    } else if(v[i][3] > v[j][1] && v[i][1] <= v[j][1]){
        v[k][1] = v[j][1];
        v[k][3] = v[i][3];
    } else if(v[i][1] < v[j][3] && v[i][3] >= v[j][3]){
        v[k][1] = v[i][1];
        v[k][3] = v[j][3];
    } else if(v[j][1] <= v[i][1] && v[j][3] >= v[i][3]){
        v[k][1] = v[i][1];
        v[k][3] = v[i][3];
    }
}

inline int getLg(int i, int pos){
    return abs(v[i][pos] - v[i][pos + 2]);
}

void solve(int i, int j, int k, int sc, bool add){
    reun(i, j, k);
    tempAria = tempPer = 0;
    if(add) tempAria = 1LL * getLg(j, 1) * getLg(j, 2);
    if(add) tempPer = 1LL * 2 * (getLg(j, 1) + getLg(j, 2));
    aria = aria + tempAria - 1LL * sc * getLg(k, 1) * getLg(k, 2);
    per = per + tempPer - 1LL * sc * 2 * (getLg(k, 1) + getLg(k, 2));
}

int main(){

    freopen("reuniune.in", "r", stdin);
    freopen("reuniune.out", "w", stdout);

    for(int i = 1; i <= 3; i++){
        for(int j = 1; j <= 4; j++)
            scanf("%d", &v[i][j]);
        swap(v[i][2], v[i][4]);
    }
    aria = 1LL * getLg(1, 1) * getLg(1, 2);
    per = 1LL * 2 * (getLg(1, 1) + getLg(1, 2));
    solve(1, 2, 4, 1, 1);
    solve(1, 3, 5, 1, 1);
    solve(2, 3, 6, 1, 0);
    solve(3, 4, 7, -1, 0);
    printf("%lld %lld", aria, per);

    return 0;
}