Cod sursa(job #2436705)

Utilizator StanCatalinStanCatalin StanCatalin Data 6 iulie 2019 19:31:22
Problema Reuniune Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.84 kb
#include <iostream>
#include <algorithm>
#include <vector>
#include <deque>
#include <map>
#include <cstring>
#include <stack>
#include <cmath>
#include <queue>
#include <fstream>

using namespace std;

const int ciur_dim = 1000000;

ifstream in("pinex.in");
ofstream out("pinex.out");

bool ok = 0;
long long int v[5][5],A1,A2,A3;
long long int sol = 0,perimetru1,P1,P2,P3;

long long int intersect(int i,int j)
{

    long long int x1 = max(v[i][1] , v[j][1]);
    long long int y1 = max(v[i][2] , v[j][2]);
    long long int x2 = min(v[i][3] , v[j][3]);
    long long int y2 = min(v[i][4] , v[j][4]);

    if (ok == 0)
    {
        v[4][1] = x1;
        v[4][2] = y1;
        v[4][3] = x2;
        v[4][4] = y2;
        ok = 1;
    }
    return abs(x2 - x1) * abs(y2 - y1);
}

long long int Perimetru(int i,int j)
{
    long long int x1 = max(v[i][1] , v[j][1]);
    long long int y1 = max(v[i][2] , v[j][2]);
    long long int x2 = min(v[i][3] , v[j][3]);
    long long int y2 = min(v[i][4] , v[j][4]);
    return 2*abs(x2 - x1) + 2*abs(y2 - y1);
}

int main()
{
    int i,j;
    for (i=1; i<=3; i++)
    {
        for (j=1; j<=4; j++)
        {
            cin >> v[i][j];
        }
    }
    A1 = abs(v[1][1] - v[1][3]) * abs(v[1][2] - v[1][4]);
    A2 = abs(v[2][1] - v[2][3]) * abs(v[2][2] - v[2][4]);
    A3 = abs(v[3][1] - v[3][3]) * abs(v[3][2] - v[3][4]);
    P1 = 2*abs(v[1][1] - v[1][3]) + 2*abs(v[1][2] - v[1][4]);
    P2 = 2*abs(v[2][1] - v[2][3]) + 2*abs(v[2][2] - v[2][4]);
    P3 = 2*abs(v[3][1] - v[3][3]) + 2*abs(v[3][2] - v[3][4]);
    sol =  A1 + A2 + A3 - intersect(1,2) - intersect(1,3) - intersect(2,3) + intersect(3,4);
    cout << sol << " ";
    perimetru1 = P1 + P2 + P3 - Perimetru(1,2) - Perimetru(2,3) - Perimetru(1,3) + Perimetru(3,4);
    cout << perimetru1;
    return 0;
}