Cod sursa(job #3297118)

Utilizator nicoleta_iancuIancu Nicoleta nicoleta_iancu Data 21 mai 2025 13:35:44
Problema Reuniune Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.1 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("reuniune.in");
ofstream fout("reuniune.out");
vector<int>X0(3);
vector<int>Y0(3);
vector<int>X1(3);
vector<int>Y1(3);
int max3(int a, int b, int c) {
    if (a > b && a > c)
    {
        return a;
    }
    else if (b > c)
    {
        return b;
    }
        return c;
}
int min3(int a, int b, int c) {
    if (a < b && a < c)
    {
        return a;
    }
    else if (b < c)
    {
        return b;
    }
    return c;
}
int main()
{
    long long arie = 0;
    long long perimetru = 0;

    for (int i = 0; i < 3; ++i) {
        fin >> X0[i] >> Y0[i] >> X1[i] >> Y1[i];
        arie += (X1[i] - X0[i] ) * (Y1[i] - Y0[i]);
        perimetru += ((X1[i] - X0[i] ) + (Y1[i] - Y0[i] )) * 2;
    }
     //  cout << arie<<endl;

    for (int i = 0; i < 3; ++i) {
        for (int j = i+1; j < 3; ++j) {
           arie-= max(0,(min(X1[i], X1[j]) - max(X0[i], X0[j]))) * max(0,(min(Y1[i], Y1[j]) - max(Y0[i], Y0[j])));
      //     cout << max(0, (min(X1[i], X1[j]) - max(X0[i], X0[j]))) * max(0, (min(Y1[i], Y1[j]) - max(Y0[i], Y0[j]))) << endl;
    //        cout << max(0, (min(X1[i], X1[j]) - max(X0[i], X0[j]))) << " " << max(0, (min(Y1[i], Y1[j]) - max(Y0[i], Y0[j]))) << endl << endl;
            perimetru -= 2*(max(0,(min(X1[i], X1[j]) - max(X0[i], X0[j]))) + max(0,(min(Y1[i], Y1[j]) - max(Y0[i], Y0[j]))));
        }
    }
  //  cout <<endl<< arie;
    for (int i = 0; i < 3; ++i) {
        for (int j = i+1; j < 3; ++j) {
            for (int k = j+1; k < 3; ++k) {
                arie += max(0,(min3(X1[k],X1[i], X1[j]) - max3(X0[k],X0[i], X0[j]))) * max(0,(min3(Y1[k], Y1[i], Y1[j]) - max3(Y0[k],Y0[i], Y0[j])));
              //  cout << "Intersectie 3: "<<max(0, (min3(X1[k], X1[i], X1[j]) - max3(X0[k], X0[i], X0[j]) + 1)) << endl;
                perimetru +=2*(max(0,(min3(X1[k],X1[i], X1[j]) - max3(X0[k],X0[i], X0[j]))) + max(0,(min3(Y1[k], Y1[i], Y1[j]) - max3(Y0[k],Y0[i], Y0[j]))));
            }
        }
    }
    fout << arie <<" "<<perimetru<< endl;
    return 0;
}