Cod sursa(job #2282423)

Utilizator teodorgTeodor G teodorg Data 13 noiembrie 2018 18:50:36
Problema Infasuratoare convexa Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.85 kb
#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[0],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;
}