Cod sursa(job #3297123)

Utilizator nicoleta_iancuIancu Nicoleta nicoleta_iancu Data 21 mai 2025 14:11:13
Problema Reuniune Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.52 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;
            if(min(X1[i], X1[j]) - max(X0[i], X0[j])>0 &&(min(Y1[i], Y1[j]) - max(Y0[i], Y0[j])>0)){
                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<<perimetru<<endl;
        }
    }
  //  cout<<perimetru<<endl;
   //cout <<arie<<endl;
    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]))));
            }
        }
    }
//    cout<<arie<<endl;
    fout << abs(arie) <<" "<<abs(perimetru)<< endl;
    return 0;
}