Pagini recente » Cod sursa (job #2627681) | Cod sursa (job #1041647) | Cod sursa (job #2420822) | Cod sursa (job #990368) | Cod sursa (job #1642903)
#include <bits/stdc++.h>
#define eps 0.000000000001
#define Nmax 120005
using namespace std;
struct Point
{
long double x,y;
bool operator <(const Point &A) const
{
return (A.y-y > eps);
}
} a[Nmax];
bool used[Nmax];
int st[Nmax],top,n;
inline long double Prod(Point A, Point B, Point C)
{
return -C.x*(B.y-A.y)-C.y*(A.x-B.x)-(B.x*A.y-A.x*B.y);
}
int main()
{
int sign=1,i;
ifstream cin("infasuratoare.in");
ofstream cout("infasuratoare.out");
cin>>n;
for(i=1;i<=n;++i) cin>>a[i].x>>a[i].y;
sort(a+1,a+n+1);
st[++top]=1; st[++top]=2; used[2]=1;
for(i=3;i;i+=sign)
{
if(used[i]) continue;
while(top>=2 && Prod(a[st[top-1]],a[st[top]],a[i])<=eps) used[st[top--]]=0;
st[++top]=i; used[i]=1;
if(i==n) sign=-1;
}
cout<<top-1<<"\n";
cout<<setprecision(12)<<fixed;
for(i=1;i<top;++i) cout<<a[st[i]].x<<" "<<a[st[i]].y<<"\n";
return 0;
}