Cod sursa(job #2347085)

Utilizator Anakin1001George Giorgiu Gica Anakin1001 Data 18 februarie 2019 13:31:01
Problema Castel Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.41 kb
#include <fstream>

using namespace std;
ifstream f("castel.in");
ofstream g("castel.out");
int fr[22501],a[151][151],x,y,i,j,n,m,k,b[151][151],q[22501][2],S;
int dx[] = {0,-1,0,1,0} , dy[]={0,0,1,0,-1},d[151][151];
void fil(int x, int y){
    for(int k=1;k<=4;k++){
        int ln=x+dx[k];
        int cn=y+dy[k];
        if(ln>=1&&ln<=n&&cn>=1&&cn<=m)
            if(fr[a[ln][cn]]==1&&b[ln][cn]==0){
                S++;
                fil(ln,cn);
        }
    }
}
int coada(int x,int y){
    int p=0,u=0;
    b[x][y]=1;
    fr[a[x][y]]=1;
    q[0][0]=x;
    q[0][1]=y;
    while(p<=u){
        int l=q[p][0];
        int c=q[p][1];
        p++;
        int nr=0;
        for(int k=1;k<=4;k++){
            int ln=l+dx[k];
            int cn=c+dy[k];
            if(ln>=1&&ln<=n&&cn>=1&&cn<=m)
            if(fr[a[ln][cn]]==1&&b[ln][cn]==0){
                q[++u][0]=ln;
                q[u][1]=cn;
                fr[(ln-1)*m+cn]=1;
                nr++;S++;
                b[ln][cn]=1;
            }
            else if(fr[a[ln][cn]]==1)
                fil(ln,cn);
        }
        d[l][c]=nr;
    }
    return S;
}
int main()
{   f>>n>>m>>k;
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
            f>>a[i][j];
    if(k%m==0){
        x=k/m;
        y=m;
    }
    else {
        x=k/m+1;
        y=k-m*(x-1);
    }
    int S=0;
    g<<coada(x,y);
    return 0;
}