Cod sursa(job #1659351)

Utilizator alex.jilavu17alex jilavu alex.jilavu17 Data 22 martie 2016 10:28:39
Problema Kdrum Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.83 kb
#include <fstream>
using namespace std;
ifstream fin("kdrum.in");
ofstream fout("kdrum.out");
int a[51][51],n,m,k,x1,y1,x2,y2,d[1001],p,u,b[51][51],Max,l=1;
int dl[4]={-1,0,1,0};
int dc[4]={0,-1,0,1};
struct element{
    int l,c,nr;}c[2501];
void cit(){
    fin>>n>>m>>k;
    fin>>x1>>y1>>x2>>y2;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++){
            fin>>a[i][j];
            if(a[i][j]>Max)
                Max=a[i][j];}
            }
int sub(int i,int j,int y){
    int m;
    if(i>j)
        return 0;
    m=(i+j)/2;
    if(d[m]==y)
        return m;
    if(y<d[m])
        return sub(i,m-1,y);
    return sub(m+1,j,y);}
void afis(){
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++)
            fout<<a[i][j]<<" ";
        fout<<'\n';}}
void multiplu(){
    int i;
    for(i=1;i<=Max;i++)
        if(k%i==0){
            d[l]=i;
            l++;}}
void Lee(){
    int in,jn,dn,i,j,d,k;
    p=u=1;
    c[u].l=x1;
    c[u].c=y1;
    c[u].nr=0;
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
            b[i][j]=-1;
    b[x1][y1]=0;
    while(p<=u){
        i=c[p].l;
        j=c[p].c;
        d=c[p].nr;
        for(k=0;k<4;k++){
            in=i+dl[k];
            jn=j+dc[k];
            dn=d+1;
            if(in>0&&jn>0&&in<n+1&&jn<m+1&&b[in][jn]==-1&&a[in][jn]==1){
                u++;
                c[u].l=in;
                c[u].c=jn;
                c[u].nr=dn;
                b[in][jn]=dn;}}
        p++;}}
int main(){
    cit();
    int i,j;
    multiplu();
    /*for(i=1;i<=k;i++)
        if(k%i==0){
            d[l]=i;
            l++;}*/
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
            if(sub(1,l,a[i][j])!=0)
                a[i][j]=1;
            else
                a[i][j]=0;
    Lee();
    fout<<b[x2][y2]+1;
    return 0;}