Pagini recente » Cod sursa (job #542953) | Cod sursa (job #1796145) | Cod sursa (job #2450844) | Istoria paginii runda/alevsrazvan | Cod sursa (job #1504996)
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
const int NMAX = 100000;
struct punct
{
int x, y;
punct(int x = 0, int y = 0)
{
this->x = x;
this->y = y;
}
};
double distanta(const punct &a, const punct &b)
{
return sqrt((a.x-b.x)*(a.x-b.x) + (a.y-b.y)*(a.y-b.y));
}
double Arie(const punct &P, const punct &B, const punct &C)
{
double baza = distanta(B, C);
double a = (B.y-C.y);
double b = (C.x-B.x);
double c = (C.y*B.x - B.y*C.x);
double inaltime = (a*P.x + b*P.y + c) / sqrt(a*a + b*b);
return baza * inaltime / 2;
}
punct v[2+NMAX];
int main()
{
freopen("aria.in", "r", stdin);
freopen("aria.out", "w", stdout);
int n;
punct p = punct();
scanf("%d", &n);
for (int i = 1; i <= n; ++i) {
scanf("%d%d", &v[i].x, &v[i].y);
p.x = min(p.x, v[i].x - 1);
p.y = min(p.y, v[i].y - 1);
}
v[n+1] = v[1];
double arieSol = 0;
for (int i = 1; i <= n; ++i)
arieSol += Arie(p, v[i], v[i+1]);
printf("%.5lf\n", arieSol );
return 0;
}