Cod sursa(job #3359220)

Utilizator rares89_Dumitriu Rares rares89_ Data 26 iunie 2026 04:13:36
Problema Reuniune Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.65 kb
#include <bits/stdc++.h>

using namespace std;

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

struct Rect {
    long long x0, y0, x1, y1;
};

Rect r[3];
vector<long long> xs, ys;
int a[10][10];

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

        xs.push_back(r[i].x0);
        xs.push_back(r[i].x1);
        ys.push_back(r[i].y0);
        ys.push_back(r[i].y1);
    }

    sort(xs.begin(), xs.end());
    xs.erase(unique(xs.begin(), xs.end()), xs.end());

    sort(ys.begin(), ys.end());
    ys.erase(unique(ys.begin(), ys.end()), ys.end());

    for(int k = 0; k < 3; k++) {
        for(int i = 0; i + 1 < (int)xs.size(); i++) {
            for(int j = 0; j + 1 < (int)ys.size(); j++) {
                if(r[k].x0 <= xs[i] && xs[i + 1] <= r[k].x1 &&
                   r[k].y0 <= ys[j] && ys[j + 1] <= r[k].y1) {
                    a[i][j] = 1;
                }
            }
        }
    }

    long long aria = 0;
    long long per = 0;

    for(int i = 0; i + 1 < (int)xs.size(); i++) {
        for(int j = 0; j + 1 < (int)ys.size(); j++) {
            if(a[i][j]) {
                long long dx = xs[i + 1] - xs[i];
                long long dy = ys[j + 1] - ys[j];

                aria += dx * dy;

                if(i == 0 || !a[i - 1][j]) per += dy;
                if(i + 2 == (int)xs.size() || !a[i + 1][j]) per += dy;
                if(j == 0 || !a[i][j - 1]) per += dx;
                if(j + 2 == (int)ys.size() || !a[i][j + 1]) per += dx;
            }
        }
    }

    fout << aria << " " << per << "\n";

    return 0;
}