Pagini recente » Cod sursa (job #2885533) | Cod sursa (job #1340447) | Cod sursa (job #2521816) | Cod sursa (job #2829805) | Cod sursa (job #430329)
Cod sursa(job #430329)
#include<fstream>
#include<queue>
#include<vector>
#define baga_la_sfarsit push_back
#define fa_pereche make_pair
#define baga push
#define prim first
#define secund second
#define PII pair<int,int>
#define pentru(i,a,n) for(int i=a;i<=n;++i)
#define PENTRU for
#define cat_timp while
#define daca if
#define altfel else
#define coada queue
#define numar_intreg int
#define goala empty
#define fata front
#define sterge pop
# define nu_e !
using namespace std;
ifstream f("castel.in");
ofstream g("castel.out");
numar_intreg n,m,k,s;
numar_intreg dx[4]={-1,0,1,0},dy[4]={0,-1,0,1};
numar_intreg a[152][152],marc[152][152],cheie[152*152];
vector<PII> K[152*152];
coada<PII> Q;
void citire()
{
f>>n>>m>>k;
pentru(i,1,n)
pentru(j,1,m) f>>a[i][j];
}
void bordare()
{
pentru(i,1,n) a[i][0]=a[i][m+1]=n*m+1;
pentru(i,1,m) a[0][i]=a[n+1][i]=n*m+1;
}
void fa (numar_intreg x, numar_intreg y)
{
k=(x-1)*m+y;
cheie[k]=1;
PENTRU (vector<pair<int,int> >::iterator it=K[k].begin();it!=K[k].end();++it)
marc[it->prim][it->secund]=2,Q.baga(*it);
K[a[x][y]].clear();
pentru (i,0,4)
daca (cheie[a[x+dx[i]][y+dy[i]]]==0)
daca (marc[x+dx[i]][y+dy[i]]==0)
{
marc[x+dx[i]][y+dy[i]]=1;
K[a[x+dx[i]][y+dy[i]]].baga_la_sfarsit(fa_pereche(x+dx[i],y+dy[i]));
}
altfel ;
altfel
daca (marc[x+dx[i]][y+dy[i]]<=1)
{
marc[x+dx[i]][y+dy[i]]=2;
Q.baga(fa_pereche(x+dx[i],y+dy[i]));
}
}
void initializare()
{
Q.baga(fa_pereche((k-1)/m+1,(k-1)%m+1));
marc[(k-1)/m+1][(k-1)%m+1]=2;
}
void parcurgere_in_latime()
{
numar_intreg x,y;
cat_timp(nu_e Q.goala())
{
x=Q.fata().prim;
y=Q.fata().secund;
Q.sterge();
++s;
fa (x,y);
}
}
void afisare()
{
g<<s<<"\n";
}
int main()
{
citire();
bordare();
initializare();
parcurgere_in_latime();
afisare();
return 0;
}