Pagini recente » Cod sursa (job #1437092) | Cod sursa (job #1994138) | Cod sursa (job #1718886) | Cod sursa (job #1740670) | Cod sursa (job #2282428)
#include <bits/stdc++.h>
#define punct pair<double,double>
#define X first
#define Y second
using namespace std;
ifstream f("infasuratoare.in");
ofstream g("infasuratoare.out");
const int N=120010;
punct p[N];
int n,i,k;
double det(punct a,punct b,punct c)
{
return (a.X*b.Y+b.X*c.Y+c.X*a.Y)-(a.Y*b.X+b.Y*c.X+c.Y*a.X);
}
bool crit(punct a, punct b)
{
double d=det(p[1],a,b);
if(d>0)
return true;
return false;
}
double x,y;
int main()
{
f>>n;
for(i=1; i<=n; i++)
{
f>>p[i].X>>p[i].Y;
if(p[i]<p[1])
swap(p[i],p[1]);
}
sort(p+2,p+n+1,crit);
k=2;
for(i=3; i<=n; i++)
{
while(det(p[k-1],p[k],p[i])<=0)
k--;
k++;
p[k]=p[i];
}
g<<k<<'\n';
for(i=1; i<=k; i++)
g<<fixed<<setprecision(6)<<p[i].X<<' '<<p[i].Y<<'\n';
return 0;
}