Cod sursa(job #197585)

Utilizator M@2Te4iMatei Misarca M@2Te4i Data 5 iulie 2008 11:19:45
Problema Gropi Scor 0
Compilator cpp Status done
Runda Junior Challenge 2008 Marime 1.52 kb
#include <fstream>
#include <iostream>
#include <cstdlib>
#include <queue>
#include <vector>

using namespace std;

queue <int> q,w;
int m,n;
vector <unsigned> a[2];

ifstream fin ("gropi.in");
ofstream fout ("gropi.out");

void citire()
{
    int x,y;
    fin>> m >> n;
    a[0].resize(m);
    a[1].resize(m);
    for (int i=0; i<n; i++)
    {
        fin>> x >> y;
        a[x-1][y]=1;
    }
}

void primu()
{
    for (int i=1; i<=m; i++)
        for (int j=0; j<2; j++)
            if (a[i][j]==0)
            {
                a[j][i]=2;
                q.push(i);
                w.push(j);
                return;
            }
}

void drum()
{
    int l,c;
    while (!q.empty())
    {
        c=q.front();
        l=w.front();
        q.pop();
        w.pop();
        if (a[l][c+1]==0)
        {
            a[l][c+1]=a[l][c]+1;
            w.push(l);
            q.push(c+1);
        }
        if (l==0 && a[l+1][c]==0)
        {
            a[l+1][c]=a[l][c]+1;
            w.push(l+1);
            q.push(c);
        }
        else if (l==1 && a[l-1][c]==0)
        {
            a[l-1][c]=a[l][c]+1;
            w.push(l-1);
            q.push(c);
        }
    }
}

void rezolvare()
{
    int t,x1,x2,y1,y2;
    for (fin>>t; t; t--)
    {
        fin>>x1>>y1>>x2>>y2;
        --x1;--x2;
        int e=a[x1][y1]-a[x2][y2];
        fout<< abs(e)+1 << "\n";
    }
}

int main()
{
    citire();
    primu();
    drum();
    rezolvare();
    return 0;
}