Cod sursa(job #1504996)

Utilizator refugiatBoni Daniel Stefan refugiat Data 18 octombrie 2015 17:19:28
Problema Aria Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#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;
}