Cod sursa(job #2419648)

Utilizator RazvanPanaiteRazvan Panaite RazvanPanaite Data 9 mai 2019 08:55:49
Problema Aria Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.43 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("aria.in");
ofstream fout("aria.out");

struct node{
    int x,y;
    struct node *urm;
};
typedef struct node* LSI;

LSI lista;

int n;
long double aria;

void inserare(LSI& L,int x,LSI p);
void creare(LSI& C);
long double heron(int x,int y,int x1,int y1,int x2,int y2);

int main(){
    int i;
    creare(lista);
    int x=lista->x;
    int y=lista->y;
    LSI it=lista;
    it=it->urm;
    while(it->urm != lista){
          aria+=heron(x,y,it->x,it->y,it->urm->x,it->urm->y);
          it=it->urm;
    }
    fout<<fixed<<setprecision(8)<<aria<<'\n';
    return 0;
}
void inserare(LSI& L,int x,int y,LSI p){
    LSI q=new node;
    q->x=x;
    q->y=y;
    if(p != NULL){
        q->urm=L;
        p->urm=q;
    }
    else{
        q->urm=L;
        L=q;
        L->urm=L;
    }
}
void creare(LSI& lista){
    int x,y,i;
    LSI ultim;
    lista=ultim=NULL;
    fin>>n;
    for(i=1;i<=n;i++){
        fin>>x>>y;
        inserare(lista,x,y,ultim);
        if(i == 1)
           ultim=lista;
           else
           ultim=ultim->urm;
    }
}
long double heron(int x,int y,int x1,int y1,int x2,int y2){
    long double l1,l2,l3;
    l1=sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1));
    l2=sqrt((x-x2)*(x-x2)+(y-y2)*(y-y2));
    l3=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
    long double p=(l1+l2+l3)/2;
    return sqrt(p*(p-l1)*(p-l2)*(p-l3));
}