Cod sursa(job #868788)

Utilizator DEYDEY2Tudorica Andrei DEYDEY2 Data 31 ianuarie 2013 17:09:34
Problema Kdrum Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.13 kb
#include <fstream>
using namespace std;
ifstream f("kdrum.in");
ofstream g("kdrum.out");
int n,m,parc[51][51],k,desck[100],i,j,desca[100],ld,lq=1,lk,ok,x1,x2,y1,y2;
bool stop;
typedef struct coada{int x,y;};
coada q[100001];
void descompunere(int a)
{
    int i=2;
    while(a!=1)
    {
        if(a%i==0)
        {
            while(a%i==0)
            {
                a=a/i;
                desca[++ld]=i;
            }
        }
    }
}
inline void sus()
{
    if(parc[i-1][j]!=0 && i!=1)
    {
        q[lq].x=i-1;
        q[lq].y=j;
        lq++;
    }
}
inline void jos()
{
    if(parc[i+1][j]!=0 && i!=n)
    {
        q[lq].x=i+1;
        q[lq].y=j;
        lq++;
    }
}
inline void stanga()
{
    if(parc[i][j-1]!=0 && j!=1)
    {
        q[lq].x=i;
        q[lq].y=j-1;
        lq++;
    }
}
inline void dreapta()
{
    if(parc[i][j+1]!=0 && j!=m)
    {
        q[lq].x=i;
        q[lq].y=j+1;
        lq++;
    }
}
int solve()
{
    for(int l=0;!stop;l++)
    {
        i=q[l].x;
        j=q[l].y;
        if(i==x2 && j==y2 && ok) stop=1;
        else
            {
                sus();
                jos();
                stanga();
                dreapta();
                descompunere(parc[q[l].x][q[l].y]);
                for(int a=1;a<=ld;a++)
                for(int b=1;b<=lk;b++) if(desca[a]==desck[b]) desck[b]=0;
                if(!(parc[q[l].x][q[l].y]==parc[q[l+1].x][q[l+1].y]
                     ||parc[q[l].x][q[l].y]==parc[q[l+2].x][q[l+2].y]
                     ||parc[q[l].x][q[l].y]==parc[q[l+3].x][q[l+3].y]
                     ||parc[q[l].x][q[l].y]==parc[q[l+4].x][q[l+4].y])) k++;
                ok=1;
                for(int a=1;a<=lk;a++) if(desck[a]!=0){ok=0; break;}
            }
    }
    return k;
}
int main()
{
    f>>n>>m>>k;
    f>>x1>>y1>>x2>>y2;
    q[0].x=x1;
    q[0].y=y1;
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
            f>>parc[i][j];
    descompunere(k);
    lk=ld;
    for(i=1;i<=lk;i++){ desck[i]=desca[i]; g<<desck[i]<<' ';}
    //g<<solve()<<'\n';
    f.close();
    g.close();
    return 0;
}