Cod sursa(job #1402084)

Utilizator DobosDobos Paul Dobos Data 26 martie 2015 12:20:41
Problema Castel Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.62 kb
#include <iostream>
#include <fstream>
#include <deque>
const int dx[]={0,0,1,-1};
const int dy[]={1,-1,0,0};
using namespace std;
ifstream f("castel.in");
ofstream g("castel.out");
deque <int> lx,ly;
int n,m,ma[152][152],s;
void afis()
{
for(int i = 1; i <= n; i++)
{
    for(int j = 1; j <= m; j++)
        g<<ma[i][j]<<" ";
    g<<"\n";
} }
void lee()
{
    int ux,uy,xx,yy,ok = 1,x,y,j,ok2,d;
    while(ok == 1)
    {
        ok = 0;
        for( j = 0 ; j < lx.size();j++)
        {
        ok2 = 0;
        d = 0;
        xx = lx[j];
        yy = ly[j];
    for(int i = 0; i < 4; i++)
    {
        ux = xx + dx[i];
        uy = yy + dy[i];
        if(ma[ux][uy] > 0)
        {

            if(ma[ux][uy]%m == 0)
               x = ma[ux][uy]/m ,y = m ;
            else
               x = ma[ux][uy]/m +1,y = ma[ux][uy]%m;
               if(ma[x][y] == 0)
               {
                   lx.push_back(ux);
                   ly.push_back(uy);
                   s++;
                   ma[ux][uy] = 0;
                   ok = 1;
               }
        }
    }
     }

    }
}
int main()
{
   int i,j,k,d,x,y;
   f>>n>>m>>k;
   if(k % m != 0)
   x = k/m + 1,y = k%m;
   else
   x = k/m, y = m;
   for(i = 1; i <= n;i++)
    for(j = 1; j <= m;j++)
    f>>ma[i][j];
   for(i = 0;i <= n+1; i++)
    ma[i][0] = ma[i][m+1] = -1;
   for(i = 0; i <= m+1; i++)
    ma[0][i] = ma[n+1][i] = -1;
   if(ma[x][y]== k)
   {
       ma[x][y] = 0;
       lx.push_back(x);
       ly.push_back(y);
       lee();
       g<<s+1<<" ";
   }
   else
    g<<0;
 // afis();
    return 0;
}