Cod sursa(job #1779280)

Utilizator andreioneaAndrei Onea andreionea Data 15 octombrie 2016 00:19:00
Problema Aria Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 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;
	}

};

#define MULT(a,b) 0.5 * (a.first * b.second - b.first * a.second)

int main()
{
	file_manip fm("aria");
	int N;
	fm >> N;
	using Point = std::pair<double, double>;
	Point first, curr, next;
	fm >> curr.first >> curr.second;
	first = curr;
	double area = 0.0;
	while (--N)
	{
		fm >> next.first >> next.second;
		area += MULT(curr, next);
		curr = next;
		if (N == 1)
		{
			area += MULT(curr, first);
		}
	}
	fm << std::fixed << std::setprecision(5) << std::abs(area);
	return 0;	
}