Pagini recente » Cod sursa (job #365068) | Cod sursa (job #906110) | Cod sursa (job #933170) | Cod sursa (job #2835897) | Cod sursa (job #1787524)
#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;
vector < pair<long,long> > clienti_n;
vector < pair<long,long> > clienti_s;
vector < pair<long,long> > clienti_e;
vector < pair<long,long> > clienti_v;
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 if(x_client<x_sediu){
//se afla la Vest de sediu -> Nord-Vest -> 2
clienti_2.push_back(make_pair(x_sediu-x_client, y_client-y_sediu));
}
else{
//intre Est si Vest, la Nord
clienti_n.push_back(make_pair(0, y_client-y_sediu));
}
}
else if(y_client<y_sediu){
//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 if(x_client>x_sediu){
//se afla la Est de sediu -> Sud-Est -> 4
clienti_4.push_back(make_pair(x_client-x_sediu, y_sediu-y_client));
}
else{
//intre Est si Vest, la Sud
clienti_s.push_back(make_pair(0, y_sediu-y_client));
}
}
else{
//intre Nord si Sud
if(x_client>x_sediu){
//la Est
clienti_e.push_back(make_pair(x_client-x_sediu, 0));
}
else{
//la Vest
clienti_v.push_back(make_pair(x_sediu-x_client, 0));
}
}
}
long nr_n=clienti_n.size()-1, nr_s=clienti_s.size()-1;
long nr_e=clienti_e.size()-1, nr_v=clienti_v.size()-1;
if(clienti_1.size()){
while(nr_n>=0){
clienti_1.push_back(make_pair(clienti_n[nr_n].first, clienti_n[nr_n].second));
nr_n--;
}
while(nr_e>=0){
clienti_1.push_back(make_pair(clienti_e[nr_e].first, clienti_e[nr_e].second));
nr_e--;
}
}
else{
while(nr_n>=0){
clienti_2.push_back(make_pair(clienti_n[nr_n].first, clienti_n[nr_n].second));
nr_n--;
}
while(nr_e>=0){
clienti_4.push_back(make_pair(clienti_e[nr_e].first, clienti_e[nr_e].second));
nr_e--;
}
}
if(clienti_3.size()){
while(nr_s>=0){
clienti_3.push_back(make_pair(clienti_s[nr_s].first, clienti_s[nr_s].second));
nr_s--;
}
while(nr_v>=0){
clienti_3.push_back(make_pair(clienti_v[nr_v].first, clienti_v[nr_v].second));
nr_v--;
}
}
else{
while(nr_v>=0){
clienti_2.push_back(make_pair(clienti_v[nr_v].first, clienti_v[nr_v].second));
nr_v--;
}
while(nr_s>=0){
clienti_4.push_back(make_pair(clienti_s[nr_s].first, clienti_s[nr_s].second));
nr_s--;
}
}
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 && clienti_1[i].first!=clienti_1[i-1].first){
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 && clienti_2[i].first!=clienti_2[i-1].first){
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 && clienti_3[i].first!=clienti_3[i-1].first){
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 && clienti_4[i].first!=clienti_4[i-1].first){
nr_drumuri++;
}
i--;
}
}
fout<<nr_drumuri;
return 0;
}