Cod sursa(job #2282428)

Utilizator teodorgTeodor G teodorg Data 13 noiembrie 2018 18:56:33
Problema Infasuratoare convexa Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 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[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;
}