Pagini recente » Cod sursa (job #1153502) | Cod sursa (job #750770) | Cod sursa (job #2790444) | Cod sursa (job #2044353) | Cod sursa (job #2175780)
#include <cstdio>
#include <algorithm>
using namespace std;
struct punct
{
double x,y;
}v[120010];
double det(punct p1,punct p2,punct p3)
{
return (p1.x-p2.x)*(p1.y-p3.y)-(p1.x-p3.x)*(p1.y-p2.y);
}
int cmp(punct a,punct b)
{
return det(v[1],a,b)>0;
}
int main()
{
freopen("infasuratoare.in","r",stdin);
freopen("infasuratoare.out","w",stdout);
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%lf%lf",&v[i].x,&v[i].y);
for(int i=2;i<=n;i++)
if(v[i].x>v[1].x) swap(v[i],v[1]);
sort(v+2,v+n+1,cmp);
int l=1;
for(int i=2;i<=n;i++)
{
while(l>2 && det(v[l-1],v[l],v[i])<0) l--;
v[++l]=v[i];
}
printf("%d\n",l);
for(int i=1;i<=l;i++) printf("%.12f %.12f\n",v[i].x,v[i].y);
return 0;
}