Cod sursa(job #2110150)

Utilizator Mihai_CMihai Corocaescu Mihai_C Data 20 ianuarie 2018 12:41:37
Problema Kdrum Scor 0
Compilator cpp Status done
Runda evaluare_cex_sv_cls_x_2 Marime 1.18 kb
#include <fstream>
using namespace std;
ifstream in("kdrum.in");
ofstream out("kdrum.out");
int a[51][51],b[51],ok=1,N,M,K,x1,x2,y1,y2,nr,p;
void restart();
void vertical(int x,int y);
void lateral(int x,int y)
{
    p*=a[x][y]; nr++;
    if(a[x][y]==a[x2][y2]) ok=0;
    else if(a[x][y+1]!=0 and (y+1)<=y2)
        lateral(x,y+1);
    else if(a[x+1][y]!=0 and (x+1)<=x2)
        vertical(x+1,y);
    else {ok--; restart();}
}
void vertical(int x,int y)
{
    p*=a[x][y]; nr++;
    if(a[x][y]==a[x2][y2]) ok=0;
    else if(a[x+1][y]!=0 and (x+1)<=x2)
        vertical(x+1,y);
    else if(a[x][y+1]!=0 and (y+1)<=y2)
        lateral(x,y+1);
    else { ok--; restart();}
}
void restart()
{
    p=1; nr=0;
    if(ok==1)
        lateral(x1,y1);
    else vertical(x1,y1);
}
int main()
{
    in>>N>>M>>K>>x1>>y1>>x2>>y2;
    for(int k1=1;k1<=N;k1++)
        for(int k2=1;k2<=M;k2++)
        in>>a[k1][k2];
    int ok=1,i=1,minim;
    restart();
    if(p%K==0) { b[i]=nr; i++;}
    if(ok==1) { ok=0; restart();}
    minim=b[1];
    for(int k=2;k<=N*M;k++)
    {
        if(b[k]==0) k=N*M+200;
        if(b[k]<minim) minim=b[k];
    }
    out<<minim;
    return 0;
}