Cod sursa(job #1929949)

Utilizator tgm000Tudor Mocioi tgm000 Data 18 martie 2017 12:49:42
Problema Pachete Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.6 kb
#include<cstdio>
#include<algorithm>
using namespace std;
struct punct{int x,y;};
punct v[50001];
punct a[50001];
bool cmp(punct a,punct b){
  if(a.x<b.x&&a.y<b.y)
    return true;
  else
    return false;
}
int main(){
  int n,x,y,i,nr,k;
  freopen("pachete.in","r",stdin);
  freopen("pachete.out","w",stdout);
  scanf("%d%d%d",&n,&x,&y);
  for(i=1;i<=n;i++){
    scanf("%d%d",&v[i].x,&v[i].y);
    v[i].x-=x;
    v[i].y-=y;
  }

  nr=0;

  //cadranul 1
  k=0;
  for(i=1;i<=n;i++){
    if(v[i].x>0&&v[i].y>0){
      k++;
      a[k].x=v[i].x;
      a[k].y=v[i].y;
    }
  }
  if(k!=0){
    sort(a+1,a+k+1,cmp);
    nr++;
    for(i=1;i<k;i++)
      if(!(a[i].x<a[i+1].x&&a[i].y<a[i+1].y))
        nr++;
  }

  //cadranul 2
  k=0;
  for(i=1;i<=n;i++){
    if(v[i].x<0&&v[i].y>0){
      k++;
      a[k].x=-v[i].x;
      a[k].y=v[i].y;
    }
  }
  if(k!=0){
    sort(a+1,a+k+1,cmp);
    nr++;
    for(i=1;i<k;i++)
      if(!(a[i].x<a[i+1].x&&a[i].y<a[i+1].y))
        nr++;
  }

  //cadranul 3
  k=0;
  for(i=1;i<=n;i++){
    if(v[i].x<0&&v[i].y<0){
      k++;
      a[k].x=-v[i].x;
      a[k].y=-v[i].y;
    }
  }
  if(k!=0){
    sort(a+1,a+k+1,cmp);
    nr++;
    for(i=1;i<k;i++)
      if(!(a[i].x<a[i+1].x&&a[i].y<a[i+1].y))
        nr++;
  }

  //cadranul 4
  k=0;
  for(i=1;i<=n;i++){
    if(v[i].x>0&&v[i].y<0){
      k++;
      a[k].x=v[i].x;
      a[k].y=-v[i].y;
    }
  }
  if(k!=0){
    sort(a+1,a+k+1,cmp);
    nr++;
    for(i=1;i<k;i++)
      if(!(a[i].x<a[i+1].x&&a[i].y<a[i+1].y))
        nr++;
  }

  printf("%d",nr);
  return 0;
}