Pagini recente » Monitorul de evaluare | Monitorul de evaluare | Istoria paginii utilizator/tudosiestefanalin | Diferente pentru runda/pregatire_lot_juniori_1 intre reviziile 1 si 2 | Cod sursa (job #2010069)
#include <fstream>
#include <iostream>
#include <set>
using namespace std;
struct segment {
long long x1;
long long y1;
long long x2;
long long y2;
};
segment v[4];
set<long long> sx, sy;
long long X[10], Y[10], A[10][10];
long long n, m, aria, perimetru;
int main () {
ifstream fin ("reuniune.in");
ofstream fout("reuniune.out");
for (long long 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<long long>::iterator itx = sx.begin(); itx != sx.end(); itx++) {
X[++n] = *itx;
}
for (set<long long>::iterator ity = sy.begin(); ity != sy.end(); ity++) {
Y[++m] = *ity;
}
for (long long i=1;i<n;i++)
for (long long j=1;j<m;j++)
for (long long 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 (long long i=1;i<n;i++)
for (long long 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 (long long j=1;j<m;j++) {
for (long long i=1;i<n;i++)
cout<<A[i][j]<<" ";
cout<<"\n";
}
*/
fout<<aria<<" "<<perimetru;
return 0;
}