Pagini recente » Cod sursa (job #745343) | Cod sursa (job #2064045) | Cod sursa (job #850849) | Cod sursa (job #1155348) | Cod sursa (job #1958074)
#include <bits/stdc++.h>
using namespace std;
struct dot{
double x;
double y;
};
int n,i,poz,st=1000000005,js=1000000005,last;
dot t[120005],rez[120005];
int f(dot a, dot b, dot c)
{
return (b.x-a.x)*(c.y-a.y)-(c.x-a.x)*(b.y-a.y);
}
bool cmp(dot a, dot b)
{
return f(t[1],a,b)<0;
}
int main()
{
ifstream cin("infasuratoare.in");
ofstream cout("infasuratoare.out");
cin>>n;
for (i=1; i<=n; i++)
cin>>t[i].x>>t[i].y;
for (i=1; i<=n; i++)
{
if (t[i].x<st) st=t[i].x,js=t[i].y,poz=i; else
if (t[i].x==st) if (t[i].y<js) st=t[i].x,js=t[i].y,poz=i;
}
swap(t[1],t[poz]);
sort(t+2,t+n+1,cmp);
rez[1]=t[1];
rez[2]=t[2];
last=2;
for (i=3; i<=n; i++)
{
while (last>=2 && f(rez[last-1],rez[last],t[i])>0) last--;
last++;
rez[last]=t[i];
}
cout<<last<<'\n';
for (i=last; i>=1; i--)
cout<<setprecision(12)<<fixed<<rez[i].x<<" "<<rez[i].y<<'\n';
}