Pagini recente » Cod sursa (job #339735) | Cod sursa (job #2670733) | Cod sursa (job #483029) | Cod sursa (job #3250482) | Cod sursa (job #1144185)
#include <iostream>
#include <fstream>
#include <cmath>
#include <algorithm>
#include <iomanip>
using namespace std;
int n,last2,last1,S[120010],K;
double Z,minx=2000000000,miny=2000000000,ma,ta;
struct kt{
double x,y,tg;
};
kt v[120010];
int cmp(kt pp, kt qq)
{
return pp.tg>qq.tg;
}
int main()
{
int i,j;
freopen("infasuratoare.in","r",stdin);
freopen("infasuratoare.out","w",stdout);
cin>>n;
for(i=1;i<=n;i++)
{
cin>>v[i].x>>v[i].y;
if(minx>v[i].x)
{
minx=v[i].x;
miny=v[i].y;
j=i;
}
else if(minx==v[i].x)
if(miny>v[i].y)
{
miny=v[i].y;
j=i;
}
}
v[j]=v[n];
//n--;
for(i=1;i<n;i++)
{
v[i].x-=minx;
v[i].y-=miny;
v[i].tg=atan2(v[i].y,v[i].x);
}
sort(v+1,v+n,cmp);
v[0].x=0;
v[0].y=0;
K=2;
S[1]=0;
S[2]=1;
for(i=2;i<n;i++)
{
while((v[S[K-1]].x*v[i].y+v[i].x*v[S[K]].y+v[S[K]].x*v[S[K-1]].y-
v[S[K-1]].y*v[i].x-v[i].y*v[S[K]].x-v[S[K]].y*v[S[K-1]].x)<0)
K--;
K++;
S[K]=i;
}
cout<<K<<"\n";
for(i=K;i>=1;i--)
v[S[i]].x+=minx,v[S[i]].y+=miny;
std::cout.precision(10);
for(i=K;i>=1;i--)
cout<<v[S[i]].x<<" "<<v[S[i]].y<<'\n';
return 0;
}