Pagini recente » Cod sursa (job #1924186) | Cod sursa (job #2385743) | Cod sursa (job #1558259) | Cod sursa (job #1968562) | Cod sursa (job #1122119)
#include<iostream>
#include<fstream>
#include<iomanip>
#include<algorithm>
using namespace std;
ifstream f("infasuratoare.in");
ofstream g("infasuratoare.out");
int n,poz,st[120001],k,i;
double minx,miny;
typedef struct{double x,y,panta;}PUNCT;
#define oo 9999999;
PUNCT v[120001],aux;
int convex()
{
PUNCT a,b,c;
double S;
a=v[st[k-1]];
b=v[st[k]];
c=v[i];
S =(a.x-c.x)*(b.y-a.y)+(a.x-b.x)*(a.y-c.y) ;
if(S>0) return 1;
return 0;
}
int cmp(PUNCT a,PUNCT b)
{
if(a.panta==b.panta) return a.x<b.x;
return a.panta<b.panta;
}
int main()
{
f>>n;
int i;
minx=miny=oo;
for(i=1;i<=n;i++)
{
f>>v[i].x>>v[i].y;
if(v[i].x<minx||v[i].x==minx&&v[i].y<miny)
{
minx=v[i].x;
miny=v[i].y;
poz=i;
}
}
aux=v[1];
v[i]=v[poz];
v[poz]=aux;
for(i=2;i<=n;i++)
v[i].panta=(v[i].y-miny)/(v[i].x-minx);
sort(v+2,v+n+1,cmp);
st[1]=1; st[2]=2; k=2;
for(i=3;i<=n;i++)
{
while(!convex()&&k>2)
k--;
st[++k]=i;
}
g<<k<<"\n";
for(i=1;i<=k;i++)
g<<fixed<<setprecision(6)<<v[st[i]].x<<" "<<fixed<<setprecision(6)<<v[st[i]].y<<"\n";
f.close();
g.close();
return 0;
}