Cod sursa(job #265452)

Utilizator ConsstantinTabacu Raul Consstantin Data 23 februarie 2009 22:01:30
Problema Gropi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include<stdio.h>
int x[2][50001],i,j,k,l,m,n,a,b,sol;

void filla(){
if(x[0][i]==-1)return ;
if(x[0][i-1]>=1)
        if(x[0][i]==0||(x[0][i-1]+1<x[0][i]))x[0][i]=x[0][i-1]+1;
if(x[1][i]>=1)
        if(x[0][i]==0||(x[1][i]+1<x[0][i]))x[0][i]=x[1][i]+1;
}


void fillb()
{if(x[1][i]==-1)return;
if(x[1][i-1]>=1)
        if(x[1][i]==0||(x[1][i-1]+1<x[1][i]))x[1][i]=x[1][i-1]+1;
if(x[0][i]>=1)
        if(x[1][i]==0||(x[0][i]+1<x[1][i]))x[1][i]=x[0][i]+1;
}


int main(){

FILE *f=fopen("gropi.in","r");

fscanf(f,"%d %d",&m,&n);

for(i=1;i<=n;i++)
        {fscanf(f,"%d %d",&a,&b);
        x[a-1][b]=-1;}
x[0][1]=1;
if(x[1][1]!=-1)x[1][1]=2;
for(i=2;i<=m;i++)
if(x[0][i-1]!=-1)
        {filla();fillb();}
else
if(x[1][i-1]!=-1)
        {fillb();filla();}
else
        {x[0][i]=1;x[1][i]=2;}
FILE *g=fopen("gropi.out","w");
fscanf(f,"%d",&m);
for(i=1;i<=m;i++)
        {fscanf(f,"%d %d %d %d",&a,&b,&k,&l);
        a--;k--;
        a=x[a][b];k=x[k][l];
        if(a>k)sol=a-k+1;
        else
        sol=k-a+1;
        fprintf(g,"%d\n",sol);}
fclose(f);
fclose(g);
return 0;}