Pagini recente » Cod sursa (job #3193840) | Furnici | Tabele hash - prezentare detaliata | Monitorul de evaluare | Cod sursa (job #3174016)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("reuniune.in");
ofstream fout("reuniune.out");
pair<int,int> interval_inters(int a1, int a2, int b1, int b2)
{
if(a1 > b1)
{
swap(a1,b1);
swap(a2,b2);
}
if(a2< b1) return {0,0};
if(b2 <= a2) return {b1,b2};
else return {b1,a2};
}
struct drept{
int xj,yj,xs,ys;
drept operator * (const drept &other)
{
pair<int,int> intervY = interval_inters(yj,ys,other.yj,other.ys);
pair<int,int> intervX = interval_inters(xj,xs,other.xj,other.xs);
return {intervX.first,intervY.first,intervX.second,intervY.second};
}
int area()
{
return (xs - xj) * (ys - yj);
}
} d[3];
int arie_reuniuni(drept a, drept b, drept c)
{
int rasp = a.area() + b.area() + c.area();
rasp -= (a*b).area() + (a*c).area() + (b*c).area();
rasp += ((a * b) * c) .area();
return rasp;
}
int main()
{
for(int i=0; i<3; i++)
{
fin>>d[i].xj>>d[i].yj>>d[i].xs>>d[i].ys;
}
fout<<arie_reuniuni(d[0],d[1],d[2])<<" ";
int perimetru = 0;
for(int i=0; i<3; i++)
{
drept lat = {d[i].xs,d[i].yj,d[i].xs,d[i].ys};
int ar = lat.area()
- (lat * d[(i+1) % 3]) .area()
- (lat * d[(i+2) % 3]) .area()
+ (lat * (d[(i+1) % 3] * d[(i+2) % 3]) ).area();
perimetru += ar;
lat = {d[i].xj + 1,d[i].ys,d[i].xs - 1,d[i].ys};
ar = lat.area()
- (lat * d[(i+1) % 3]) .area()
- (lat * d[(i+2) % 3]) .area()
+ (lat * (d[(i+1) % 3] * d[(i+2) % 3]) ).area();
perimetru += ar;
lat = {d[i].xj,d[i].yj + 1,d[i].xj,d[i].ys - 1};
ar = lat.area()
- (lat * d[(i+1) % 3]) .area()
- (lat * d[(i+2) % 3]) .area()
+ (lat * (d[(i+1) % 3] * d[(i+2) % 3]) ).area();
perimetru += ar;
lat = {d[i].xj,d[i].yj,d[i].xs,d[i].yj};
ar = lat.area()
- (lat * d[(i+1) % 3]) .area()
- (lat * d[(i+2) % 3]) .area()
+ (lat * (d[(i+1) % 3] * d[(i+2) % 3]) ).area();
perimetru += ar;
}
fout<<perimetru;
return 0;
}