Cod sursă (job #823316)

Utilizator avatar popescu_george Popescu George popescu_george IP ascuns
Problemă Înfășurătoare convexă Compilator cpp-32 | 0,87 kb
Rundă Arhiva de probleme Status evaluat
Dată 11 mai 2025 08:25:38 Scor 100
#include<fstream>
#include<algorithm>
using namespace std;
ifstream cin("infasuratoare.in");
ofstream cout("infasuratoare.out");
#define P pair<int,int>
#define y first
#define x second
P a[100001],b[1000];
bool A(P a,P b,P c)
{
    return 1LL*(a.x-b.x)*(c.y-b.y)<1LL*(a.y-b.y)*(c.x-b.x);
}
int main()
{
    int m=0,n;
    cin>>n;
    for(int i=1;i<=n;cin>>a[i].x>>a[i].y,++i);
    sort(a+1,a+n+1);
    for(int i=1;i<=n;++i)
        if(m<2)
            b[m++]=a[i];
        else {
            for(;m>1&&!A(b[m-2],b[m-1],a[i]);--m);
            b[m++]=a[i];
        }
    int k=m-1;
    for(int i=n-1;i;--i)
        if(m<k+2)
            b[m++]=a[i];
        else {
            for(;m>k+1&&!A(b[m-2],b[m-1],a[i]);--m);
            b[m++]=a[i];
        }
    --m,cout<<m<<'\n';
    for(int i=0;i<m;cout<<b[i].x<<' '<<b[i].y<<'\n',++i);
    return 0;
}