Pagini recente » Cod sursa (job #3033158) | Cod sursa (job #2794327) | Cod sursa (job #2075533) | Cod sursa (job #1575478) | Cod sursa (job #1759520)
#include <bits/stdc++.h>
#define maxN 2002
#define pii pair < double, double >
#define f first
#define s second
#define mp make_pair
#define inf 1000000
#definr Inf 2000000
using namespace std;
int n, m;
pii v[3][maxN];
double ans;
int Sign(pii a, pii b, pii c)
{
}
double A(int t)
{
int i;
double aria = 0.0;
for (i = 1; i <= n; ++ i)
aria += v[i].x * v[i + 1].y - v[i + 1].x * v[i].y;
return 0.5 * aria;
}
void read()
{
freopen("camera.in", "r", stdin);
scanf("%d", &n);
for (int i = 1; i <= n; ++ i)
scanf("%lf %lf", &v[0][i].f, &v[0][i].s);
v[0][n + 1] = v[1];
s = A(0) > 0 ? 1 : -1;
}
void solve()
{
int i, j;
v[1][1] = mp(-inf, inf);
v[1][2] = mp(inf, inf);
v[1][3] = mp(inf, -inf);
v[1][4] = mp(-inf, -inf);
v[1][5] = mp(-inf, inf);
for (i = 1; i <= n; ++ i)
{
if (m <= 2)
{
ans = 0.0;
return ;
}
for (j = 1; j <= m; ++ j)
{
int k = j + 1;
int sg1 = sign(v[0][i], v[0][i + 1], v[1][j]),
sg2 = sign(v[0][i], v[0][i + 1], v[1][k]);
/// sg1 = sg2 !=
if (sg1 == s && sg2 != s)
v[2][++ p] = inters(v[0][i], v[0][i + 1], v[1][j], v[1][k]);
if (sg1 != s && sg2 != s)
v[2][++ p] = v[1][j];
if (sg1 != s && sg2 == s)
{
v[2][++ p] = inters(v[0][i], v[0][i + 1], v[1][j], v[1][k]);
v[2][++ p] = v[1][j];
}
}
if (p > 1)
if (v[2][p - 1].x == Inf || v[2][p - 1].y == Inf)
-- p;
if (p > 0 && v[2][p - 1].x == Inf || v[2][p - 1].y == Inf)
-- p;
m = p;
memcpy(v[1], v[2], sizeof(v[2]));
}
ans = A(1);
}
void write()
{
freopen("camer.out", "w", stdout);
printf("%.3lf", ans);
}
int main()
{
read();
solve();
write();
return 0;
}