Cod sursa(job #287782)

Utilizator loginLogin Iustin Anca login Data 25 martie 2009 09:59:47
Problema Castel Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.16 kb
# include <fstream>  
using namespace std;  
int a[153][153], b[153][153], n, m, k, c[23000], is, js, di[4]={0, 0, 1, -1}, dj[4]={-1, 1, 0, 0}, rez, nd, nn;  
ofstream fout ("castel.out");
struct tip{  
      int i, j, c;};  
tip d[23000];   
void citire ()  
{
    int i, j, c=0;  
    ifstream fin ("castel.in");  
    fin>>n>>m>>k;  
    for (i=1;i<=n;i++)  
        for (j=1;j<=m;j++)  
            fin>>a[i][j];  
    k%m?is=k/m+1:is=k/m;  
    k%m?js=k%m:js=m;  
    for (i=1;i<=n;i++)
        for (j=1;j<=m;j++)
            b[i][j]=++c;
}
void lee (int ist, int jst)
{
    int i, j, ii, jj, k, ci[2000], cj[2000], st, dr, l;
    st=dr=1;
    ci[st]=ist, cj[st]=jst;
    c[b[ist][jst]]=1;   
    a[ist][jst]=0;
    rez=rez+2;
    while (st<=dr)
    {
        i=ci[st];
        j=cj[st];
        for (k=0;k<4;k++)
        {
            ii=i+di[k];
            jj=j+dj[k];
            if (a[ii][jj]!=0)
            {
                if (c[a[ii][jj]]==1)
                {
                    for (l=1;l<=nd;l++)
                        if (d[l].c==b[ii][jj])
                        {
                           ci[++dr]=d[l].i;
                           cj[dr]=d[l].j;
                           d[l].c=0;
                           //fout<<"am gasit  "<<b[ii][jj]<<endl;
                    }                     
                //    fout<<"intru cu cheia         "<<a[ii][jj]<<endl;
                    a[ii][jj]=0;
                    c[b[ii][jj]]=1;
                    ci[++dr]=ii;
                    cj[dr]=jj;
                    rez++;
                }            
                else
                {
                    d[++nd].i=ii;
                    d[nd].j=jj;
                    d[nd].c=a[ii][jj];
                 //   fout<<"imi trebuie  "<<a[ii][jj]<<endl;
                }
            }
        }
        ++st;
    }
   // fout<<endl;
    //for (i=1;i<=dr;i++)
   //     fout<<ci[i]<<" ";
   // fout<<endl;    
 //   for (i=1;i<=dr;i++)
//        fout<<cj[i]<<" ";
  //  fout<<endl;
}                    

int main ()  
{  
    citire ();  
    lee(is, js);
    fout<<rez;
    return 0;  
  }