Pagini recente » Cod sursa (job #2693447) | Cod sursa (job #1500841) | Borderou de evaluare (job #1567488) | Cod sursa (job #1140848) | Cod sursa (job #1165957)
#include<fstream>
#include<cstdio>
#include<set>
#include<stack>
#include<vector>
#include<algorithm>
#define FOR(a,b,c) for(int a=b;a<=c;++a)
#include<cstring>
#include<bitset>
#include<cmath>
#include<iomanip>
#include<queue>
#define f cin
#define g cout
#define mp make_pair
#define pb push_back
#define x first
#define y second
#define ll long long
#define bit 20
#define inf (1<<30)
#define base 256
#define ba 255
#define N 500100
#define EPS 1e-12
#define mod 666013
#define inu "infasuratoare.in"
#define outu "infasuratoare.out"
using namespace std;
ifstream f(inu);
ofstream g(outu);
//int dx[]={0,0,0,1,-1};
//int dy[]={0,1,-1,0,0};
pair<double , double> v[N];
int t,s[N],n,viz[N];
double det(int a,int b,int c)
{
double d=(v[a].x*v[b].y+v[b].x*v[c].y+v[a].y*v[c].x)-(v[b].y*v[c].x+v[a].y*v[b].x+v[a].x*v[c].y);
return d;
}
int main ()
{
f>>n;
FOR(i,1,n)
f>>v[i].x>>v[i].y;
sort(v+1,v+n+1);
s[1]=1;
s[2]=2;
t=2;
viz[1]=viz[2]=1;
FOR(i,3,n)
{
while(t>1&&det(s[t-1],s[t],i)<EPS)
{
viz[s[t]]=0;
t--;
}
s[++t]=i;
viz[i]=1;
}
for(int i=n-1;i>=1;--i)
{
if(!viz[i])
{
while(t>1&&det(s[t-1],s[t],i)<EPS)
{
viz[s[t]]=0;
t--;
}
s[++t]=i;
}
}
g<<t<<"\n";
g<<setprecision(6)<<fixed;
FOR(i,1,t)
g<<v[s[i]].x<<" "<<v[s[i]].y<<"\n";
return 0;
}