Pagini recente » Cod sursa (job #2415749) | Istoria paginii runda/jc2020-runda2/clasament | Cod sursa (job #5244) | Cod sursa (job #848128) | Cod sursa (job #1334077)
#include <fstream>
using namespace std;
const int INF = 0x3f3f3f3f;
int N;
int v[4][4];
long long A, P;
inline long long getArea(int conf) {
int x1 = -INF, x2 = INF, y1 = -INF, y2 = INF;
long long ret = 0;
for(int i = 0; i < N; ++i)
if(conf & (1 << i)) {
x1 = max(x1, v[i + 1][0]);
x2 = min(x2, v[i + 1][2]);
y1 = max(y1, v[i + 1][1]);
y2 = min(y2, v[i + 1][3]);
}
if(x1 <= x2 && y1 <= y2)
ret = 1LL * (x2 - x1) * (y2 - y1);
return ret;
}
inline long long getPerimeter(int conf) {
int x1 = -INF, x2 = INF, y1 = -INF, y2 = INF;
long long ret = 0;
for(int i = 0; i < N; ++i)
if(conf & (1 << i)) {
x1 = max(x1, v[i + 1][0]);
x2 = min(x2, v[i + 1][2]);
y1 = max(y1, v[i + 1][1]);
y2 = min(y2, v[i + 1][3]);
}
if(x1 <= x2 && y1 <= y2)
ret = 2LL * ((x2 - x1) + (y2 - y1));
return ret;
}
int main() {
ifstream f("reuniune.in");
ofstream g("reuniune.out");
N = 3;
for(int i = 1; i <= N; ++i)
for(int j = 0; j < 4; ++j)
f >> v[i][j];
for(int conf = 1; conf < (1 << N); ++conf) {
int cnt = 0;
for(int i = 0; i < N; ++i)
if(conf & (1 << i))
++cnt;
long long a = getArea(conf), p = getPerimeter(conf);
if(cnt % 2) {
A += a;
P += p;
}
else {
A -= a;
P -= p;
}
}
g << A << " " << P << "\n";
f.close();
g.close();
return 0;
}