Cod sursa(job #921128)

Utilizator kjasiojdiasTest Tuot kjasiojdias Data 20 martie 2013 19:54:58
Problema Aria Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 1.29 kb
#include <stdio.h>

typedef struct _punct{
    int x,y;
} punct;

int n;
punct p[100000+1];

void read_data(){
    FILE *fIn;
    int i;

    fIn = fopen("aria.in", "r");

    fscanf(fIn, "%d", &n);
    for(i = 1; i <=n ; i++)
        fscanf(fIn, "%d %d", &(p[i].x), &(p[i].y));

    fclose(fIn);
}

void aranjare(){
    int i,x_min = 0,y_min = 0;

    for(i = 1; i <= n; i++){
        if(p[i].x < x_min)
            x_min = p[i].x;

        if(p[i].y < y_min)
            y_min = p[i].y;
    }

    if(x_min < 0)
        x_min = x_min * -1;
    else
        x_min = 0;

    if(y_min < 0)
        y_min = y_min * -1;
    else
        y_min = 0;

    for(i = 1; i <= n; i++){
        p[i].x += x_min;
        p[i].y += y_min;
     }
}

void schimb(){
    int i,to;
    punct tmp;

    to = n%2 == 0 ? n/2 : (n-1) / 2;
    for(i = 1; i <= to; i++){
        tmp = p[n-i+1];
        p[n-i+1] = p[i];
        p[i] = tmp;
    }
}

int main(){
    read_data();
    aranjare();
    schimb();
    p[++n] = p[1];

    double aria = 0.0;
    int i;

    for(i = 1; i < n; i++){
        aria += (p[i+1].x - p[i].x) * (p[i].y + p[i+1].y) / 2;
        //printf("%f %d %d %d %d\n", aria, p[i].x, p[i].y, p[i+1].x, p[i+1].y);
    }

    FILE *fOut = fopen("aria.out", "w");
    fprintf(fOut, "%f\n", aria);
    fclose(fOut);

    return 0;
}