Cod sursa(job #1779271)

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

};


int main()
{
	file_manip fm("aria");
	int N;
	fm >> N;
	using Point = std::pair<float, float>;
	Point first, curr, next;
	fm >> curr.first >> curr.second;
	first = curr;
	double area = 0.0;
	while (--N)
	{
		fm >> next.first >> next.second;
		area += curr.first * next.second * 0.5 - next.first * curr.second * 0.5;

		curr = next;
		if (N == 1)
		{
			next = first;
			area += curr.first * next.second * 0.5 - next.first * curr.second * 0.5;
		}
	}
	fm << std::abs(area);
	return 0;	
}