Cod sursa(job #2299218)

Utilizator andreioneaAndrei Onea andreionea Data 9 decembrie 2018 05:40:25
Problema Aria Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include <fstream>
#include <iomanip>
#include <cmath>
 
struct file_manip {
 
    std::ifstream fin;
    std::ofstream fout;
 
    file_manip(const char* filename) {
        std::string infilename  = std::string(filename) + ".in";
        std::string outfilename = std::string(filename) + ".out";
        fin.open(infilename.c_str());
        fout.open(outfilename.c_str());
    }
 
    template <class T>
    file_manip& operator << (const T& rhs) {
        fout << rhs;
        return *this;
    }

    template <class T>
    file_manip& operator >> (T& rhs) {
        fin >> rhs;
        return *this;
    }
    template <class T>
    file_manip& operator >> (std::pair<T, T>& rhs) {
        fin >> rhs.first >> rhs.second;
        return *this;
    }
 
};
 
#define MULT(a,b) (a.first * b.second - b.first * a.second)
 
int main()
{
    file_manip fm("aria");
    int N;
    fm >> N;
    using Point = std::pair<long double, long double>;
    Point first, curr, next;
    fm >> curr;
    first = curr;
    long double area = 0.0;
    while (--N)
    {
        fm >> next;
        area += MULT(curr, next);
        curr = next;
    }
    area += MULT(curr, first);
    fm << std::fixed << std::setprecision(6) << std::fabs(area) / 2;
    return 0;   
}