Cod sursa(job #2010065)

Utilizator mariusn01Marius Nicoli mariusn01 Data 11 august 2017 17:36:42
Problema Reuniune Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.01 kb
#include <fstream>
#include <iostream>
#include <set>

using namespace std;
struct segment {
    int x1;
    int y1;
    int x2;
    int y2;

};

segment v[4];

set<int> sx, sy;
int X[10], Y[10], A[10][10];
int n, m, aria, perimetru;

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

    for (int i=1;i<=3;i++) {
        fin>>v[i].x1>>v[i].y1>>v[i].x2>>v[i].y2;
        if (v[i].x1 > v[i].x2) {
            swap(v[i].x1, v[i].x2);
        }
        if (v[i].y1 > v[i].y2) {
            swap(v[i].y1, v[i].y2);
        }
        sx.insert(v[i].x1);
        sx.insert(v[i].x2);
        sy.insert(v[i].y1);
        sy.insert(v[i].y2);
    }

    for (set<int>::iterator itx = sx.begin(); itx != sx.end(); itx++) {
        X[++n] = *itx;
    }
    for (set<int>::iterator ity = sy.begin(); ity != sy.end(); ity++) {
        Y[++m] = *ity;
    }

    for (int i=1;i<n;i++)
        for (int j=1;j<m;j++)
            for (int k=1;k<=3;k++)
                if (v[k].x1 <= X[i] && X[i+1] <= v[k].x2 && v[k].y1 <= Y[j] && Y[j+1] <= v[k].y2)
                    A[i][j] = 1;


    for (int i=1;i<n;i++)
        for (int j=1;j<m;j++)
            if (A[i][j] == 1) {
                aria += (X[i+1]-X[i]) * (Y[j+1]-Y[j]);
                if (A[i-1][j] == 0)
                    perimetru += (Y[j+1] - Y[j]);
                    //perimetru += (X[i+1] - X[i]);
                if (A[i+1][j] == 0)
                    perimetru += (Y[j+1] - Y[j]);
                    //perimetru += (X[i+1] - X[i]);
                if (A[i][j-1] == 0)
                    perimetru += (X[i+1] - X[i]);

                    //perimetru += (Y[j+1] - Y[j]);
                if (A[i][j+1] == 0)
                    perimetru += (X[i+1] - X[i]);

                    //perimetru += (Y[j+1] - Y[j]);
            }
/*
    for (int j=1;j<m;j++) {
        for (int i=1;i<n;i++)
            cout<<A[i][j]<<" ";
        cout<<"\n";
    }
*/
    fout<<aria<<" "<<perimetru;
    return 0;
}