Cod sursă (job #816367)

Utilizator avatar Tzepu Icriverzi Andrei Tzepu IP ascuns
Problemă Înfășurătoare convexă Compilator cpp-32 | 1,52 kb
Rundă Arhiva de probleme Status evaluat
Dată 27 mar. 2025 11:00:25 Scor 0
#include <bits/stdc++.h>

using namespace std;

ifstream in ("infasuratoare.in");
ofstream out ("infasuratoare.out");

#define MAX 100005

int stiva[MAX];

struct pct {
    int x,y;
} v[MAX];

bool cmp (pct a, pct b){///sortam dupa tg
    return ((a.y+1000000001)*1.0)/((a.x+1000000001)*1.0)>((b.y+1000000001)*1.0)/((b.x+1000000001)*1.0);
}

int main()
{
    int n;
    in >> n;
    for (int i=1; i<=n; i++) {
        in >> v[i].x >> v[i].y;
    }
    sort (v+1,v+1+n, cmp);
    for (int i=1; i<=n; i++){
        cout << v[i].x << " " << v[i].y << endl;
    }
    stiva[1]=1;
    stiva[2]=2;
    int cnt=2;
    bool sens=-1;
    for (int i=3; i<=n; i++){
        if (v[stiva[i-2]].x*v[stiva[i-1]].y+v[i].x*v[stiva[i-2]].y+v[stiva[i-1]].x*v[i].y-v[i].x*v[stiva[i-1]].y-v[stiva[i-2]].x*v[i].y-v[stiva[i-1]].x*v[stiva[i-2]].y>0){
            if (sens==1){
                stiva[++cnt]=i;
            } else {
                stiva[cnt]=i;
                sens=1;
            }
        } else if (v[stiva[i-2]].x*v[stiva[i-1]].y+v[i].x*v[stiva[i-2]].y+v[stiva[i-1]].x*v[i].y-v[i].x*v[stiva[i-1]].y-v[stiva[i-2]].x*v[i].y-v[stiva[i-1]].x*v[stiva[i-2]].y<0){
            if (sens==0){
                stiva[++cnt]=i;
            } else {
                stiva[cnt]=i;
                sens=1;
            }
        } else {
            if ()
        }
    }
    out << cnt << '\n';
    for (int i=1; i<=cnt; i++){
        out << v[stiva[i]].x << " " << v[stiva[i]].y << '\n';
    }

    return 0;
}