Cod sursa(job #2763840)

Utilizator Mihai145Oprea Mihai Adrian Mihai145 Data 17 iulie 2021 09:29:21
Problema Aria Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <fstream>
#include <algorithm>

using namespace std;

ifstream cin("copaci.in");
ofstream cout("copaci.out");

const int NMAX = 1e5;

int N;
pair <int, int> v[NMAX + 2];


long long TriangleArea(pair <int, int> A, pair <int, int> B, pair <int, int> C)
{
    return 1LL * A.first * B.second + 1LL * B.first * C.second + 1LL * C.first * A.second
           - 1LL * C.first * B.second - 1LL * A.first * C.second - 1LL * B.first * A.second;
}

int ABS(int x)
{
    return max(x, -x);
}

int main()
{
    cin >> N;
    for(int i = 1; i <= N; i++)
    {
        cin >> v[i].first >> v[i].second;
    }
    v[N + 1] = v[1];

    ///A = I + (P / 2) - 1
    ///I = A - (P / 2) + 1

    long double area = 0;
    for(int i = 1; i <= N; i++)
    {
        area += TriangleArea({0, 0}, v[i], v[i + 1]);
    }
    area /= 2;
    area = max(area, -area);

    int perimeter = 0;
    for(int i = 1; i <= N; i++)
    {
        perimeter += ABS(v[i + 1].first - v[i].first) / __gcd(ABS(v[i + 1].first - v[i].first), ABS(v[i + 1].second - v[i].second));
    }

    cout << area - 0.5 * perimeter + 1 << '\n';

    return 0;
}