Cod sursa(job #3297119)

Utilizator nicoleta_iancuIancu Nicoleta nicoleta_iancu Data 21 mai 2025 13:39:54
Problema Reuniune Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.3 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("reuniune.in");
ofstream fout("reuniune.out");
vector<long long>X0(3);
vector<long long>Y0(3);
vector<long long>X1(3);
vector<long long>Y1(3);
long long max3(long long a, long long b, long long c) {
    if (a > b && a > c)
    {
        return a;
    }
    else if (b > c)
    {
        return b;
    }
        return c;
}
long long min3(long long a, long long b, long long 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 (long long 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 (long long i = 0; i < 3; ++i) {
        for (long long j = i+1; j < 3; ++j) {
           arie-= max((long long)0,(min(X1[i], X1[j]) - max(X0[i], X0[j]))) * max((long long)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((long long)0,(min(X1[i], X1[j]) - max(X0[i], X0[j]))) + max((long long)0,(min(Y1[i], Y1[j]) - max(Y0[i], Y0[j]))));
        }
    }
  //  cout <<endl<< arie;
    for (long long i = 0; i < 3; ++i) {
        for (long long j = i+1; j < 3; ++j) {
            for (long long k = j+1; k < 3; ++k) {
                arie += max((long long)0,(min3(X1[k],X1[i], X1[j]) - max3(X0[k],X0[i], X0[j]))) * max((long long)0,(min3(Y1[k], Y1[i], Y1[j]) - max3(Y0[k],Y0[i], Y0[j])));
              //  cout << "long longersectie 3: "<<max(0, (min3(X1[k], X1[i], X1[j]) - max3(X0[k], X0[i], X0[j]) + 1)) << endl;
                perimetru +=2*(max((long long)0,(min3(X1[k],X1[i], X1[j]) - max3(X0[k],X0[i], X0[j]))) + max((long long)0,(min3(Y1[k], Y1[i], Y1[j]) - max3(Y0[k],Y0[i], Y0[j]))));
            }
        }
    }
    fout << arie <<" "<<perimetru<< endl;
    return 0;
}