Cod sursa(job #3357844)

Utilizator Alexandra282Calin Maria Alexandra Alexandra282 Data 13 iunie 2026 16:29:58
Problema Reuniune Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.06 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("reuniune.in");
ofstream g("reuniune.out");
long long d[4][5],s,p;
long long pery(int d1, int d2)
{
      if(d[d1][2]>=d[d2][2]) swap(d1,d2);
          if(d[d1][4]<=d[d2][2]) return 0;
          return -d[d2][2]+min(d[d1][4],d[d2][4]);
}
long long perx(int d1, int d2)
{
    if(d[d1][1]>=d[d2][1]) swap(d1,d2);
          if(d[d1][3]<=d[d2][1]) return 0;
          return -d[d2][1]+min(d[d1][3],d[d2][3]);
}
long long pery2(int d1, int d2)
{
      if(d[d1][2]>=d[d2][2]) swap(d1,d2);
          if(d[d1][4]==d[d2][2]) return 0;
          if(d[d1][4]<d[d2][2]) return -1;
          return -d[d2][2]+min(d[d1][4],d[d2][4]);
}
long long perx2(int d1, int d2)
{
    if(d[d1][1]>=d[d2][1]) swap(d1,d2);
          if(d[d1][3]==d[d2][1]) return 0;
          if(d[d1][3]<d[d2][1]) return -1;
          return -d[d2][1]+min(d[d1][3],d[d2][3]);
}
void functie(long long c1, long long c2)
{
    if(c1>=0&&c2>=0)
    {if(c1==0) p-=c2;
    else
    if(c2==0) p-=c1;
    else
        p-=2*(c1+c2);
    }
}
int main()
{
    for(int i=1;i<=3;i++)
    {
        for(int j=1;j<=4;j++)
            f>>d[i][j];
        s+=(d[i][3]-d[i][1])*(d[i][4]-d[i][2]);
        p+=2*((d[i][3]-d[i][1])+(d[i][4]-d[i][2]));
    }
    s-=pery(1,2)*perx(1,2);
    s-=pery(2,3)*perx(2,3);
    s-=pery(1,3)*perx(1,3);

    functie(perx2(1,2),pery2(1,2));
    functie(perx2(2,3),pery2(2,3));
    functie(perx2(1,3),pery2(1,3));
    long long m1,m2,x;
    m1=max(max(d[1][1],d[2][1]),d[3][1]);
    m2=min(min(d[1][3],d[2][3]),d[3][3]);
    if(m1<m2)
    {
        x=m2-m1;
        m1=max(max(d[1][2],d[2][2]),d[3][2]);
        m2=min(min(d[1][4],d[2][4]),d[3][4]);
        if(m1<m2)
            {s+=(m2-m1)*x;
             p+=2*(m2-m1)+2*x;
            }
        if(m1==m2)p+=x;
    }
    else
    {
        if(m2==m1)
        {m1=max(max(d[1][2],d[2][2]),d[3][2]);
            m2=min(min(d[1][4],d[2][4]),d[3][4]);
        if(m1<m2) p+=m2-m1;
        }
    }
    g<<s<<' '<<p;
    return 0;
}