Cod sursa(job #1787456)

Utilizator MateiMCCiurezu Matei MateiMC Data 24 octombrie 2016 18:35:31
Problema Pachete Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.58 kb
#include <fstream>
#include <algorithm>
#include <vector>
#define CEVA 50005
using namespace std;
ifstream fin("pachete.in");
ofstream fout("pachete.out");
long n, i, nr_drumuri=0;
long long x_sediu, y_sediu, x_client, y_client;
vector < pair<long,long> > clienti_1;
vector < pair<long,long> > clienti_2;
vector < pair<long,long> > clienti_3;
vector < pair<long,long> > clienti_4;

int main()
{
    fin>>n;
    fin>>x_sediu>>y_sediu;

    for(int i=1; i<=n; i++){
        fin>>x_client>>y_client;
        //determin directia fata de sediu: 1=Nord-Est, 2=Nord-Vest, 3=Sud-Vest, 4=Sud-Est
        if(y_client>y_sediu){
            //se afla la Nord de sediu
            if(x_client>x_sediu){
                //se afla la Est de sediu -> Nord-Est -> 1
                clienti_1.push_back(make_pair(x_client-x_sediu, y_client-y_sediu));
            }
            else{
                //se afla la Vest de sediu -> Nord-Vest -> 2
                clienti_2.push_back(make_pair(x_sediu-x_client, y_client-y_sediu));
            }
        }
        else{
            //se afla la Sud de sediu
            if(x_client<x_sediu){
                //se afla la Vest de sediu -> Sud-Vest -> 3
                clienti_3.push_back(make_pair(x_sediu-x_client, y_sediu-y_client));
            }
            else{
                //se afla la Est de sediu -> Sud-Est -> 4
                clienti_4.push_back(make_pair(x_client-x_sediu, y_sediu-y_client));
            }
        }

    }

    sort(clienti_1.begin(), clienti_1.end());
    sort(clienti_2.begin(), clienti_2.end());
    sort(clienti_3.begin(), clienti_3.end());
    sort(clienti_4.begin(), clienti_4.end());

    if(clienti_1.size()){
        i=clienti_1.size()-1;
        nr_drumuri++;
        while(i>=1){
            if(clienti_1[i].second<clienti_1[i-1].second){
                nr_drumuri++;
            }
            i--;
        }
    }

    if(clienti_2.size()){
        i=clienti_2.size()-1;
        nr_drumuri++;
        while(i>=1){
            if(clienti_2[i].second<clienti_2[i-1].second){
                nr_drumuri++;
            }
            i--;
        }
    }

    if(clienti_3.size()){
        i=clienti_3.size()-1;
        nr_drumuri++;
        while(i>=1){
            if(clienti_3[i].second<clienti_3[i-1].second){
                nr_drumuri++;
            }
            i--;
        }
    }

    if(clienti_4.size()){
        i=clienti_4.size()-1;
        nr_drumuri++;
        while(i>=1){
            if(clienti_4[i].second<clienti_4[i-1].second){
                nr_drumuri++;
            }
            i--;
        }
    }

    cout<<nr_drumuri;

    return 0;
}