Cod sursa(job #1759520)

Utilizator akaprosAna Kapros akapros Data 19 septembrie 2016 13:48:01
Problema Camera Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2 kb
#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;
}