Pagini recente » Cod sursa (job #244405) | Cod sursa (job #16916) | Cod sursa (job #2205099) | Cod sursa (job #1104124) | Cod sursa (job #1144708)
#include <cstdio>
#include <algorithm>
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.y*qq.x>pp.x*qq.y;
}
int calcul(int aa,int bb,int cc)
{
return v[aa].x*v[bb].y+v[bb].x*v[cc].y+v[cc].x*v[aa].y-
v[aa].y*v[bb].x-v[bb].y*v[cc].x-v[cc].y*v[aa].x;
}
int main()
{
int i,j;
FILE *f=fopen("infasuratoare.in","r");
FILE *g=fopen("infasuratoare.out","w");
fscanf(f,"%d",&n);
for(i=1;i<=n;i++)
{
fscanf(f,"%lf%lf",&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];
for(i=1;i<n;i++)
{
v[i].x-=minx;
v[i].y-=miny;
}
sort(v+1,v+n,cmp);
v[0].x=0;v[0].y=0;
S[1]=0;S[2]=1;
K=2;
for(i=2;i<n;i++)
{
while(calcul(S[K-1],i,S[K])<0)
K--;
K++;
S[K]=i;
}
fprintf(g,"%d\n",K);
for(i=K;i>=1;i--)
v[S[i]].x+=minx,v[S[i]].y+=miny;
for(i=K;i>=1;i--)
fprintf(g,"%0.13lf %0.13lf\n",v[S[i]].x,v[S[i]].y);
return 0;
}