Pagini recente » Cod sursa (job #1971015) | Cod sursa (job #2688451) | Cod sursa (job #3129793) | Cod sursa (job #1006699) | Cod sursa (job #868788)
Cod sursa(job #868788)
#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;
}