Pagini recente »
Cod sursă (job #676092)
|
Cod sursă (job #676638)
|
Cod sursă (job #626439)
|
Borderou de evaluare (job #156970)
|
Cod sursă (job #517772)
Cod sursă (job
#517772)
#include<fstream>
#include<vector>
#include <algorithm>
#include <iomanip>
using namespace std;
ifstream f("infasuratoare.in");
ofstream g("infasuratoare.out");
#define N 130000
#define x first
#define y second
typedef pair<double,double> punct;
punct v[N],s[N];
double unghi(punct O,punct A, punct B){
return (A.x-O.x)*(B.y-O.y)-(A.y-O.y)*(B.x-O.x);
}
bool cmp(punct A, punct B){
return unghi(v[1],A,B)<0;
}
int main()
{
int n,c=1;
f>>n;
for(int i=1;i<=n;i++)
f>>v[i].x>>v[i].y;
for(int i=2;i<=n;i++)
if(v[c]>v[i])
c=i;
swap(v[c],v[1]);
sort(v+2,v+n+1,cmp);
s[1]=v[1];s[2]=v[2];c=2;
for(int i=3;i<=n;i++)
{
while(c>=2&&unghi(s[c-1],s[c],v[i])>0)
c--;
s[++c]=v[i];
}
g<<c<<"\n";
for(int i=c;i>=1;i--)
g<<fixed<<setprecision(9)<<s[i].x<<" "<<s[i].y<<"\n";
}