O tablă de joc cu n linii, numerotate de la 1 la n și m coloane, numerotate de la 1 la m conține n*m celule identice. Celula din colţul din stânga sus se află pe linia 1 şi coloana 1. O celulă poate fi: celulă liberă, celulă în care se află o piatră sau celulă de tip gaură.
Pietrele sunt numerotate cu valori începând de la 1. Numerotarea pietrelor pe tablă se face în ordinea în care sunt
Exemplu
pietre.in
5 4 6 2 1 1 1 2 2 2 3 2 3 3 4 1 3 4 5 3 VSE
pietre.out
5 4 1 1 1 2 2 2 5 1
Explicație
Piatra 1: nu poate efectua săritura V (deoarece ar părăsi tabla de joc), nici săritura S (pentru că nu există nicio piatră în celula vecină aflată în direcția sud), efectuează săritura E, deci configurația finală a tabelei va conține 5 pietre.
Pentru piatra 2 se obține configurația finală identică celei inițiale, deoarece nu poate efectua nicio săritură.
Piatra 3 poate efectua doar săritura S. Configurația finală conține 5 pietre.
Piatra 4 nu poate efectua nicio săritură. Configurația finală conține 6 pietre.
Piatra 5 poate efectua săriturile: V și dispare piatra 4, S și dispare piatra și nu poate efectua săritura E. Configurația finală are 4 pietre.
Piatra 6 nu poate efectua nicio săritură. Configurația finală conține 6 pietre.
# include <fstream>
using namespace std;
ifstream f("pietre.in");
ofstream g("pietre.out");
int dl[5]={0,-1,0,1,0}, dc[5]={0,0,1,0,-1}, a[102][102], b[102][102],c[102][102],x[10002][2];
int nrp,m,n,i,j,xx,minn,ii,jj,l,cl,k,t,d,piatra,p,q,p1,q1;
char s[256];
int main()
{
f>>m>>n>>k>>t;
for (i=1;i<=k;i++)
{ f>>l>>cl;
a[l][cl]=1;
x[i][0]=l;
x[i][1]=cl;
}
for (i=1;i<=t;i++)
{ f>>l>>cl;
a[l][cl]=-1;
}
i=0;
while (f>>s[i])
i++;
xx=i;
for(i=0;i<=m+1;i++)
{ a[i][0]=-1;
a[i][n+1]=-1;
}
for(j=1;j<=n;j++)
{
a[0][j]=-1;
a[m+1][j]=-1;
}
minn=m*n+1;
for(p=1;p<=k;p++)
{i=x[p][0];j=x[p][1];
for (ii=0;ii<=m+1;ii++)
for(jj=0;jj<=n+1;jj++)
b[ii][jj]=a[ii][jj];
for (t=0;t<xx;t++)
{
if(s[t]=='N') d=1;
else
if (s[t]=='S') d=3;
else
if (s[t]=='E') d=2;
else
d=4;
if (b[i+dl[d]][j+dc[d]]==1)
if (i+2*dl[d]>=1 && i+2*dl[d]<=m && j+2*dc[d]>=1 && j+2*dc[d]<=n)
if (b[i+2*dl[d]][j+2*dc[d]]==0)
{
b[i+2*dl[d]][j+2*dc[d]]=1;
b[i+dl[d]][j+dc[d]]=0;
b[i][j]=0;
i=i+2*dl[d];
j=j+2*dc[d];
}
}
nrp=0;
for (ii=1;ii<=m;ii++)
for (jj=1;jj<=n;jj++)
if (b[ii][jj]==1)
nrp=nrp+1;
if (nrp<minn)
{
minn=nrp;
for (p1=1;p1<=m;p1++)
for (q1=1;q1<=n;q1++)
c[p1][q1]=b[p1][q1];
piatra=p;
}
}
g<<piatra<<endl<<minn<<endl;
for (i=1;i<=m;i++)
for (j=1;j<=n;j++)
if (c[i][j]==1)
g<<i<<" "<<j<<endl;
return 0;
}