Cod sursa(job #287807)

Utilizator loginLogin Iustin Anca login Data 25 martie 2009 10:44:33
Problema Castel Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.93 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, p[153][153];  
ofstream fout ("castel.out");
struct tip{  
      int i, j, c;};  
tip d[90000];   
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[90000], cj[90000], st, dr, l;
    st=dr=1;
    ci[st]=ist, cj[st]=jst;
    c[b[ist][jst]]=1;   
    a[ist][jst]=0;
    rez++;;
    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;
                        }                     
                    a[ii][jj]=0;
                    c[b[ii][jj]]=1;
                    ci[++dr]=ii;
                    cj[dr]=jj;
                    rez++;
                }            
                else
                {
                    if (p[ii][jj]==0)
                    {
                       d[++nd].i=i;
                       d[nd].j=j;
                       d[nd].c=a[ii][jj];
                       p[ii][jj]=1;
                   }    
                }
            }
        }
        ++st;
    }
}                    

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