Pagini recente » Cod sursa (job #1671848) | Cod sursa (job #946636) | Cod sursa (job #2143291) | Cod sursa (job #321612) | Cod sursa (job #266431)
Cod sursa(job #266431)
#include <cstdio>
#include <algorithm>
#include <iostream>
#define FIN "reuniune.in"
#define FOUT "reuniune.out"
#define INF 2000000000LL
using namespace std;
long long s,p;
int k;
pair <int,int> a[3][2];
pair <int,int> it[4][2];
void read()
{
int i,j;
freopen(FIN,"r",stdin);
for (i = 0; i < 3; ++i)
for (j = 0; j < 2; ++j)
scanf("%d%d", &a[i][j].first, &a[i][j].second);
}
long long maxim(long long a, long long b)
{
return a > b ? a : b;
}
long long minim(long long a,long long b)
{
return a < b ? a : b;
}
void perimetru()
{
int i;
for (i = 0; i< 3; ++i)
p += 2LL * ((long long)(a[i][1].first - a[i][0].first) + (a[i][1].second - a[i][0].second));
for (i = 0; i < k; ++i)
{
if (it[i][1].first >= it[i][0].first && it[i][1].second >= it[i][0].second)
p -= 2LL * ((long long) it[i][1].first - it[i][0].first + it[i][1].second - it[i][0].second);
//p -= 2 * (mod(it[i][1].first - it[i][0].first) + mod(it[i][1].second - it[i][0].second));
}
if (it[k][1].first >= it[k][0].first && it[k][1].second >= it[k][0].second)
p += 2LL * ((long long) it[k][1].first - it[k][0].first + it[k][1].second - it[k][0].second);
}
void arie()
{
int i;
long long j = 0;
for (i = 0; i < 3; ++i)
if (a[i][1].first - a[i][0].first > 0 && a[i][1].second - a[i][0].second > 0)
s += 1LL * ((long long)a[i][1].first - a[i][0].first) * ((long long)a[i][1].second - a[i][0].second);
for (i = 0; i < k - 1; ++i)
if (it[i][1].first - it[i][0].first > 0 && it[i][1].second - it[i][0].second > 0)
s -= 1LL * ((long long)it[i][1].first - it[i][0].first ) * ((long long)it[i][1].second - it[i][0].second );
//j = 1LL * minim(minim(it[0][1].first, it[1][1].first), minim(it[0][1].first, it[2][1].first)) - maxim(maxim(it[0][0].first, it[1][0].first), maxim(it[0][0].first, it[2][0].first));
if (j > 0)
j = 1LL * j * (minim(minim((long long)it[0][1].second, it[1][1].second), minim((long long) it[0][1].second, it[2][1].second))
- maxim(maxim((long long)it[0][0].second, it[1][0].second), maxim((long long)it[0][0].second, it[2][0].second)));
if (j > 0)
s += j;
}
void solve()
{
int i,j;
for (i = 0; i < 3; ++i)
for (j = i + 1; j < 3; ++j)
{
it[k][0] = make_pair( maxim(a[i][0].first, a[j][0].first), maxim(a[i][0].second, a[j][0].second));
it[k++][1] = make_pair( minim(a[i][1].first, a[j][1].first), minim(a[i][1].second, a[j][1].second));
}
it[k][0] = make_pair(- INF, - INF);
it[k][1] = make_pair(INF,INF);
for (i = 0; i < k ; ++i)
{
if (it[i][0] > it[k][0])
it[k][0] = it[i][0];
if (it[i][1] < it[k][1])
it[k][1] = it[i][1];
}
/*p = 2 * (maxim(maxim(a[0][1].second, a[1][1].second), maxim(a[0][1].second, a[2][1].second))
- minim(minim(a[0][0].second, a[1][0].second), minim(a[0][0].second, a[2][0].second)))
+ 2 * (maxim(maxim(a[0][1].first, a[1][1].first), maxim(a[0][1].first, a[2][1].first))
- minim(minim(a[0][0].first, a[1][0].first), minim(a[0][0].first, a[2][0].first)));
*/
perimetru();
arie();
}
void write()
{
freopen(FOUT,"w",stdout);
cout << s << " " << p << "\n";
}
int main()
{
read();
solve();
write();
}