Pagini recente » Cod sursa (job #403992) | Cod sursa (job #358094) | Cod sursa (job #895654) | Cod sursa (job #3256509) | Cod sursa (job #197585)
Cod sursa(job #197585)
#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;
}