Cod sursa(job #1688791)

Utilizator SolcanMihaiSolcan Mihai Andrei SolcanMihai Data 13 aprilie 2016 18:52:52
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.68 kb
#include <cstdio>
#include <utility>
#include <vector>

using namespace std;

int n;
vector<pair<long double, long double> > puncte;

void citire()
{
    scanf("%d", &n);

    long double x, y;

    for(int i = 0; i < n; i++)
    {
        scanf("%Lf %Lf", &x, &y);

        x += 1000000;
        y += 1000000;

        puncte.push_back(make_pair(x, y));
    }

    puncte.push_back(puncte[0]);
}

void arie()
{
    long double arie = 0;

    for(int i = 0; i < n; i++)
    {
        arie += (puncte[i + 1].first - puncte[i].first) * (puncte[i].second + puncte[i + 1].second);
    }

    arie /= 2;

    if(arie < 0)
    {
        arie = -arie;
    }

    if(arie == (int)arie)
    {
        printf("%.0Lf", arie);
    }
    else if((arie * 10) == (int)(arie * 10))
    {
        arie = arie * 10;
        arie = (long long)arie;
        arie = arie / 10;

        printf("%.1Lf", arie);
    }
    else if((arie * 100) == (int)(arie * 100))
    {
        arie = arie * 100;
        arie = (long long)arie;
        arie = arie / 100;

        printf("%.2Lf", arie);
    }
    else if((arie * 1000) == (int)(arie * 1000))
    {
        arie = arie * 1000;
        arie = (long long)arie;
        arie = arie / 1000;

        printf("%.3Lf", arie);
    }
    else if((arie * 10000) == (int)(arie * 10000))
    {
        arie = arie * 10000;
        arie = (long long)arie;
        arie = arie / 10000;

        printf("%.4Lf", arie);
    }
    else
    {
        arie = arie * 100000;
        arie = (long long)arie;
        arie = arie / 100000;

        printf("%.5Lf", arie);
    }
}

int main()
{
    freopen("aria.in", "r", stdin);
    freopen("aria.out", "w", stdout);

    citire();
    arie();

    return 0;
}