Pagini recente » Cod sursa (job #404513) | Cod sursa (job #1846604) | Cod sursa (job #1803285) | Cod sursa (job #2454550) | Cod sursa (job #1670063)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <iomanip>
using namespace std;
ifstream f("infasuratoare.in");
ofstream g("infasuratoare.out");
struct p
{
double x;
double y;
};
p v[120002],a[120002];
bool cmp(p a,p b)
{
return (b.x*a.y>a.x*b.y);
}
int main()
{
int i,n,k=4,j,r;
double minix=1000000002,miniy=1000000002,s,q;
f>>n;
for(i=1;i<=n;i++)
{
f>>v[i].x>>v[i].y;
if(v[i].x<minix)
minix=v[i].x;
if(v[i].y<miniy)
miniy=v[i].y;
}
if(minix<0)
for(i=1;i<=n;i++)
v[i].x=v[i].x+minix;
if(miniy<0)
for(i=1;i<=n;i++)
v[i].y=v[i].y+miniy;
sort(v+1,v+n+1,cmp);
v[n+1]=v[1];
a[1]=v[1];
a[2]=v[2];
a[3]=v[3];
j=2;
for(i=4;i<=n;i++)
{
s=a[j].x*a[j+1].y+a[j+1].x*v[i].y+a[j].y*v[i].x-v[i].x*a[j+1].y-a[j+1].x*a[j].y-v[i].y*a[j].x;
if(s>0)
{
r=j-1;
s=a[j].x*a[j+1].y+a[j+1].x*v[i].y+a[j].y*v[i].x-v[i].x*a[j+1].y-a[j+1].x*a[j].y-v[i].y*a[j].x;
q=a[r].x*a[r+1].y+a[r+1].x*v[i].y+a[r].y*v[i].x-v[i].x*a[r+1].y-a[r+1].x*a[r].y-v[i].y*a[r].x;
while(q>s)
{
r--;
k--;
q=a[r].x*a[r+1].y+a[r+1].x*v[i].y+a[r].y*v[i].x-v[i].x*a[r+1].y-a[r+1].x*a[r].y-v[i].y*a[r].x;
}
a[k-1]=v[i];
}
else
{
a[k]=v[i];
k++;
j++;
}
}
for(i=k-1;i>=1;i--)
g<<setprecision (7)<<a[i].x<<' '<<setprecision (7)<<a[i].y<<'\n';
return 0;
}