Cod sursa(job #2222825)

Utilizator inquisitorAnders inquisitor Data 18 iulie 2018 10:00:05
Problema Aria Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.35 kb
#include <cstdio>

#define bufferSize 1 << 16

char inBuffer[bufferSize];

int index = bufferSize;

__attribute__((always_inline)) char get_char()
{
    if(index == bufferSize)
    {
        fread(inBuffer, 1, bufferSize, stdin);

        index = 0;
    }

    return inBuffer[index++];
}

double get_double()
{
    char c = get_char(), sign = '+'; double integerPart = 0;

    for(; c < 48 || c > 57; c = get_char()) sign = c;

    for(; c > 47 && c < 58; c = get_char()) integerPart = integerPart * 10 + c - '0';

    if(c == '.')
    {
        double fractionalPart = 0, power = 1;

        for(; (c = get_char()) > 47 && c < 58; power *= 10)

            fractionalPart = fractionalPart * 10 + c - '0';

        integerPart += fractionalPart / power;
    }

    return (sign == '-') ? -integerPart : integerPart;
}

struct point{double x, y;}p[100002];

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

    int N; double area = 0;

    N = get_double();

    for(int i = 1; i <= N; ++i)
    {
        p[i].x = get_double();

        p[i].y = get_double();
    }

    p[N + 1].x = p[1].x;

    p[N + 1].y = p[1].y;

    for(int i = 1; i <= N; i++)
    {
        area += p[i].x * p[i + 1].y - p[i].y * p[i + 1].x;
    }

    printf("%.5lf", area / 2);

    return 0;
}