Cod sursa(job #1948718)

Utilizator edicCiuculescu Eduard edic Data 1 aprilie 2017 12:56:07
Problema Pachete Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.72 kb
#include<cstdio>
#include<algorithm>
using namespace std;
struct cad
{
    int i,j;
};
cad ma[5][50002];
int st[5][100000];
const int inf=2e9+2;
bool so(cad a,cad b)
{
    return a.i<b.i;
}
int f(int cadr)
{
    if(ma[cadr][0].i==0)
        return 0;
    sort(ma[cadr]+1,ma[cadr]+ma[cadr][0].i,so);
    int n=ma[cadr][0].i;
    st[cadr][0]=inf;
    int a=1<<15,pas,s=0,poz;
    for(int i=1;i<=n;i++)
    {
        pas=a;
        poz=0;
        while(pas)
        {
            if(st[cadr][poz+pas]>ma[cadr][i].j)
            {
                poz+=pas;
            }
            pas/=2;
        }
        if(st[cadr][poz+1]==0)
            s++;
        st[cadr][poz+1]=ma[cadr][i].j;
    }
    return s;
}
int main()
{
    freopen("pachete.in","r",stdin);
    freopen("pachete.out","w",stdout);
    int n,i,x,y,x1,y1;
    scanf("%d%d%d",&n,&x,&y);
    for(i=1;i<=n;i++)
    {
        scanf("%d%d",&x1,&y1);
        if(x1>x)
        {
            if(y1>y)
            {
                ma[1][0].i++;
                ma[1][ma[1][0].i].i=x1-x;
                ma[1][ma[1][0].i].j=y1-y;
            }
            else
            {
                ma[2][0].i++;
                ma[2][ma[2][0].i].i=x1-x;
                ma[2][ma[2][0].i].j=y-y1;
            }
        }
        else
        {
            if(y1>y)
            {
                ma[3][0].i++;
                ma[3][ma[3][0].i].i=x-x1;
                ma[3][ma[3][0].i].j=y1-y;
            }
            else
            {
                ma[4][0].i++;
                ma[4][ma[4][0].i].i=x-x1;
                ma[4][ma[4][0].i].j=y-y1;
            }
        }
    }
    printf("%d",f(1)+f(2)+f(3)+f(4));
    return 0;
}