Pagini recente » Cod sursa (job #3208524) | Cod sursa (job #490114) | Cod sursa (job #2890768) | Cod sursa (job #104292) | Cod sursa (job #1610145)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <iomanip>
#define x first
#define y second
using namespace std;
ifstream fin("infasuratoare.in");
ofstream fout("infasuratoare.out");
pair <double, double> stiva[120005],v[120005];
int n;
int det(pair <double, double> a, pair <double, double> b, pair <double, double> c)
{
return (b.y - a.y) * (c.x - a.x) - (b.x - a.x) * (c.y - a.y);
}
bool cmp(pair <double, double> a, pair <double, double> b)
{
return (det(v[1],a,b)<0);
}
bool cmp1(pair <double, double> a, pair <double, double> b)
{
return a.y>b.y;
}
void convex_hull()
{
int poz = 1;
for (int i = 2; i <= n; i ++)
if (v[i].y < v[poz].y || (v[i].y == v[poz].y && v[i].x < v[poz].x))
poz = i;
pair <double, double> aux;
aux = v[1];
v[1] = v[poz];
v[poz] = aux;
sort(v+2,v+n+1,cmp);
stiva[1]=v[1];
stiva[2]=v[2];
int top=2;
for(int i=3;i<=n;i++)
{
while(det(stiva[top-1],stiva[top],v[i])>0 && top>=2)
top--;
stiva[++top]=v[i];
}
fout<<top<<'\n';
fout<<fixed<<setprecision(6);
for (int i = 1; i <= top; i ++)
fout<<stiva[i].x<<" "<<stiva[i].y<<'\n';
}
int main()
{
fin>>n;
for(int i=1;i<=n;i++)
{
fin>>v[i].x>>v[i].y;
}
convex_hull();
return 0;
}