Cod sursa(job #791686)

Utilizator roxyroxy2011Luca Roxana roxyroxy2011 Data 24 septembrie 2012 20:47:57
Problema Kdrum Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <fstream>
#include <queue>
#include <cstdlib>
#define f first
#define s second
#define mp make_pair

using namespace std;

int n,m,k,x1,y1,x2,y2;
int c[55][55];

ifstream f("kdrum.in");
ofstream g("kdrum.out");

void read();
void solve();

int main()
{
    read();
    solve();
    f.close();g.close();
    return 0;
}

void read()
{
    f>>n>>m>>k>>x1>>y1>>x2>>y2;
    for (int i=1;i<=n;i++)
        for (int j=1;j<=m;j++)
            f>>c[i][j];
}

void solve()
{
    queue<pair<int,int> >que;
    queue<pair<int,int> >cost;
    que.push(mp(x1,y1));
    cost.push(mp(c[x1][y1],1));
    int dl[4]={0,1,0,-1},dc[4]={1,0,-1,0};
    while (!que.empty())
    {
        pair<int,int>z=que.front();que.pop();
        pair<int,int>cc=cost.front();cost.pop();
        for (int t=0;t<4;t++)
        {
            int auxx=dl[t]+z.f,auxy=dc[t]+z.s,
            aux=c[auxx][auxy];
            if (auxx==x2 && auxy==y2 &&
                !((cc.f*aux)%k))
            {
                g<<cc.s+1<<'\n'; f.close();g.close();
                exit(0);
            }
            if (aux)
            {
                que.push(mp(auxx,auxy));
                cost.push(mp(cc.f*aux,cc.s+1));
            }
        }
    }
}