Cod sursa(job #2774582)

Utilizator AsakariGeicu Emil Asakari Data 12 septembrie 2021 01:06:55
Problema Infasuratoare convexa Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <iostream>
#include <vector>
#include <fstream>
#include <iomanip>
using namespace std;
ifstream f("infasuratoare.in");
ofstream g("infasuratoare.out");
struct Punct
{
	double x, y;
};
int orientare(Punct startp, Punct inter, Punct finalp)
{
	int ok = (inter.y - startp.y) * (finalp.x - inter.x) - (inter.x - startp.x) * (finalp.x - inter.y);
	if (ok < 0)
		return 1;
	else
		return 0;
}

void coordonate_poligon(vector<Punct> puncte, int n)
{
	vector<Punct> CPoly;
	int left = 0;
	for (int i = 0; i < n; i++)
		if (puncte[i].x < puncte[i].x)
			left = i;
	int startp = left , finalp;
	do {
		CPoly.push_back(puncte[startp]);
		finalp = 0;
		for (int inter = 0; inter < n; inter++)
		{
			if (orientare(puncte[startp], puncte[inter], puncte[finalp]))
				finalp = inter;
		}
		startp = finalp;
	} while (startp != left);
	cout<<setprecision(6);
	cout << fixed;
	for (auto& i : CPoly)
		g << "("<< i.x << "," << i.y << ")\n";
}

int main()
{
	vector<Punct> puncte;
	int n;
	f >> n;
	for (int i = 0; i < n; i++)
	{
		Punct cord;
		f >> cord.x >> cord.y;
		puncte.push_back(cord);
	}
	coordonate_poligon(puncte, n);
	return 0;
}