Cod sursa(job #792131)

Utilizator geniucosOncescu Costin geniucos Data 26 septembrie 2012 15:58:43
Problema Gropi Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include<cstdio>
using namespace std;
int aux,p1,i1,x1,x2,y1,y2,s,i,j,n,c[3][100004],a[3][100004];
void su(int x1,int y1,int x2,int y2)
{
    if(y1==y2)
    {
        if(x1==x2) return ;
        else
        {
            s++;
            return ;
        }
    }
    if(x1==x2)
    {
        if(c[x1][y1]>y2)
        {
            s=s+y2-y1+1;
            return ;
        }
        else
        {
            s=s+c[x1][y1]-y1;
            su(3-x1,c[x1][y1]-1,x2,y2);
        }
    }
    else
    {
        if(c[x1][y1]>y2)
        {
            s=s+1+y2-y1+1;
            return ;
        }
        else
        {
            s=s+c[x1][y1]-y1;
            su(3-x1,c[x1][y1]-1,x2,y2);
        }
    }
}
int main()
{
freopen("gropi.in","r",stdin);
freopen("gropi.out","w",stdout);
scanf("%d",&n);
scanf("%d",&p1);
for(i1=1;i1<=p1;i1++)
{
    scanf("%d",&x1);
    scanf("%d",&y1);
    a[x1][y1]=1;
}
c[1][n]=n+1;
c[1][n+1]=n+1;
c[2][n]=n+1;
c[2][n+1]=n+1;
for(i=1;i<=2;i++)
    for(j=n;j>=1;j--)
        {if(a[i][j]==1) c[i][j]=j;
        else c[i][j]=c[i][j+1];}
scanf("%d",&p1);
for(i1=1;i1<=p1;i1++)
{
    scanf("%d",&x1);
    scanf("%d",&y1);
    scanf("%d",&x2);
    scanf("%d",&y2);
    if(y1>y2)
    {
        aux=y1;
        y1=y2;
        y2=aux;
        aux=x1;
        x1=x2;
        x2=aux;
    }
    s=0;
    su(x1,y1,x2,y2);
    printf("%d\n",s);
}
return 0;
}