Cod sursa(job #3314661)

Utilizator Alexia12345Maftei Alexia Alexia12345 Data 10 octombrie 2025 17:04:54
Problema Reuniune Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.66 kb
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;

ifstream fin("reuniune.in");
ofstream fout("reuniune.out");

struct coord
{
    int x0, y0, x1, y1;
};
vector<coord> v;

int calcarie(const vector<int>& indices)
{
    int x0 = -1e9, y0 = -1e9, x1 = 1e9, y1 = 1e9;

    for (int idx : indices)
    {
        const coord& r = v[idx];
        x0 = max(x0, r.x0);
        y0 = max(y0, r.y0);
        x1 = min(x1, r.x1);
        y1 = min(y1, r.y1);
    }

    if (x0 >= x1 || y0 >= y1)
        return 0;
    return (x1 - x0) * (y1 - y0);
}
int calcperim(const vector<int>& indices)
{
    int x0 = -1e9, y0 = -1e9, x1 = 1e9, y1 = 1e9;

    for (int idx : indices)
    {
        const coord& r = v[idx];
        x0 = max(x0, r.x0);
        y0 = max(y0, r.y0);
        x1 = min(x1, r.x1);
        y1 = min(y1, r.y1);
    }

    if (x0 >= x1 || y0 >= y1)
        return 0;
    return (x1 - x0)*2 +2*(y1 - y0);
}
void pinex(int &s, int &p)
{
    int lim=1<<3;
    for (int i=1; i<lim; ++i)
    {
        vector <int> indices;
        for (int j=0; j<3; ++j)
            if (i&(1<<j))
                indices.push_back(j);
        int area = calcarie(indices);
        int perim= calcperim(indices);
        if (indices.size() % 2 == 1)
        {
            s=s+area;
            p=p+perim;
        }
        else
        {
            s=s-area;
            p=p-perim;
        }
    }
}

int main()
{
    v.resize(3);
    for (int i = 0; i < 3; ++i)
        fin >> v[i].x0 >> v[i].y0 >> v[i].x1 >> v[i].y1;

    int s=0,p=0;
    pinex(s,p);

    fout << s << " " << p << "\n";
    return 0;
}