Cod sursa(job #3258285)

Utilizator Mihai_OctMihai Octavian Mihai_Oct Data 21 noiembrie 2024 18:50:27
Problema Pachete Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("pachete.in");
ofstream fout("pachete.out");
struct Punct {
    int x, y;

    Punct(int _x = 0, int _y = 0) {
        x = _x;
        y = _y;
    }

    bool operator<(Punct p) {
        return (x < p.x || (x == p.x && y < p.y));
    }
};
vector<Punct> c[4];
int n, i, r;
Punct s, p;

static inline int Drumuri(int idx) {
    set<int> s;
    int dr = 0;

    sort(c[i].begin(), c[i].end());
    for(auto cur : c[i]) {
        auto it = s.lower_bound(cur.y);

        if(it == s.begin()) {
            dr++;
            s.insert(cur.y);
        }
        else {
            it--;
            s.erase(it);
            s.insert(cur.y);
        }
    }
    return dr;
}

int main()  {
    fin >> n >> s.x >> s.y;
    for(i = 1; i <= n; i++) {
        fin >> p.x >> p.y;

        Punct nou = Punct(abs(p.x - s.x), abs(p.y - s.y));

        if(p.x > s.x && p.y > s.y) c[0].push_back(nou);
        if(p.x < s.x && p.y > s.y) c[1].push_back(nou);
        if(p.x < s.x && p.y < s.y) c[2].push_back(nou);
        if(p.x > s.x && p.y < s.y) c[3].push_back(nou);
    }

    for(i = 0; i < 4; i++) r += Drumuri(i);
    fout << r;

    return 0;
}