Cod sursa(job #1163466)

Utilizator usermeBogdan Cretu userme Data 1 aprilie 2014 13:14:30
Problema Fractii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <fstream>

using namespace std;

ifstream f("sarpe2.in");
ofstream h("sarpe2.out");

//FILE*f=fopen("sarpe2.in","r");
//FILE*h=fopen("sarpe2.out","w");

bool t[1005][1005];

int p[1005][1005];

int m[1005][1005],n,k,v[100005],sol,z;

int fill( int x , int y ){
    if ( m[x][y]!=v[z]||x<1||x>n||y<1||y>n||z>k )return 0;
    if ( p[x][y]!=0 ){
        return p[x][y];
    }
    if ( t[x][y]!=0 )return 0;
    t[x][y]=1;
    if ( z==k ){
        p[x][y]=1;
        return 1;
    }
    ++z;
    p[x][y]=(fill(x+1,y)+fill(x-1,y)+fill(x,y+1)+fill(x,y-1)+fill(x+1,y+1)+fill(x-1,y-1)+fill(x-1,y+1)+fill(x+1,y-1))%666013;
    --z;
    return p[x][y];
}

int main(){
    f>>n>>k;
    for ( int i=1;i<=k;++i )
        f>>v[i];
    for ( int i=1;i<=n;++i )
        for ( int j=1;j<=n;++j )
            f>>m[i][j];
    /*for ( int i=1;i<=n;++i ){
        for ( int j=1;j<=n;++j )
            fprintf(h,"%d ",m[i][j]);
        fprintf(h,"\n");
    }*/
    for ( int i=1;i<=n;++i )
        for ( int j=1;j<=n;++j )
            if ( m[i][j]==v[1] ){
                z=1;
                sol=(sol+fill(i,j))%666013;
            }
    h<<sol;
    return 0;
}