Cod sursa(job #3297129)

Utilizator nicoleta_iancuIancu Nicoleta nicoleta_iancu Data 21 mai 2025 14:21:20
Problema Reuniune Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 3.06 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;
}
bool intersectie(int x0,int y0,int xf0,int yf0,int x1,int y1,int xf1,int yf1){
    if(min(xf0,xf1)-min(x0,x1)<0 && min(yf0,yf1)-min(y0,y1)<0){
        return false;
    }
    return true;
}
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;
    }
    if((!intersectie(X0[0],Y0[0],X1[0],Y1[0],X0[1],Y0[1],X1[1],Y1[1]) && !intersectie(X0[0],Y0[0],X1[0],Y1[0],X0[2],Y0[2],X1[2],Y1[2]))&&!intersectie(X0[1],Y0[1],X1[1],Y1[1],X0[2],Y0[2],X1[2],Y1[2])){
       fout<<arie<<" "<<perimetru<<"\n";
    }else{
        //  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;
}