Pagini recente » Cod sursa (job #577323) | Cod sursa (job #3257453) | Cod sursa (job #2623794) | Cod sursa (job #1312211) | Cod sursa (job #41494)
Cod sursa(job #41494)
#include <stdio.h>
#include <math.h>
typedef struct punct
{
long long x, y;
};
typedef struct drept
{
punct st, dr;
};
drept d[3];
long long a, p;
inline long long min(long long a, long long b)
{
if(a < b)
return a;
return b;
}
inline long long max(long long a, long long b)
{
if(a > b)
return a;
return b;
}
inline int se_intersecteaza(drept a, drept b)
{
/*int x1 = min(a.st.x, a.dr.x); int x3 = min(b.st.x, b.dr.x);
int x2 = max(a.st.x, a.dr.x); int x4 = max(b.st.x, b.dr.x);
int y1 = min(a.st.y, a.dr.y); int y3 = min(b.st.y, b.dr.y);
int y2 = max(a.st.y, a.dr.y); int y4 = max(b.st.y, b.dr.y);
*/
return (a.dr.x >= b.st.x && a.st.x <= b.dr.x && a.st.y <= b.dr.y && b.st.y <= a.dr.y);
}
drept intersectie(drept a, drept b)
{
drept aux;
if(se_intersecteaza(a, b))
{
aux.st.x = max(a.st.x, b.st.x);
aux.st.y = max(a.st.y, b.st.y);
aux.dr.x = min(a.dr.x, b.dr.x);
aux.dr.y = min(a.dr.y, b.dr.y);
}
else
{
aux.st.x = aux.st.y = aux.dr.x = aux.dr.y = 0;
}
return aux;
}
long double dist(punct a, punct b)
{
return sqrt((a.x-b.x)*(a.x-b.x) + (a.y-b.y)*(a.y-b.y));
}
long long per(drept a)
{
punct x;
x.x = a.dr.x;
x.y = a.st.y;
return (dist(a.st, x)+dist(x, a.dr))*2;
}
long long arie(drept a)
{
punct x;
x.x = a.dr.x;
x.y = a.st.y;
return (dist(a.st, x)*dist(x, a.dr));
}
int main()
{
int i;
drept r01, r12, r02, r012;
freopen("reuniune.in", "r", stdin);
freopen("reuniune.out", "w", stdout);
for(i = 0; i < 3; ++i)
{
scanf("%lld %lld %lld %lld\n", &d[i].st.x, &d[i].st.y, &d[i].dr.x, &d[i].dr.y);
}
r01 = intersectie(d[0], d[1]);
r12 = intersectie(d[1], d[2]);
r02 = intersectie(d[0], d[2]);
r012 = intersectie(r01, d[2]);
a = arie(d[0])+arie(d[1])+arie(d[2]) - arie(r01)-arie(r12)-arie(r02)+arie(r012);
p = per(d[0])+per(d[1])+per(d[2])-per(r01)-per(r12)-per(r02)+per(r012);
printf("%lld %lld\n", a, p);
fclose(stdin);
fclose(stdout);
return 0;
}