#include<fstream>
using namespace std;
const int dx[4]={-1,1,0,0};
const int dy[4]={0,0,-1,1};
char a[100][100],s[50];
int n,m,i,j,maxx;
ifstream f("r.in");
ofstream fout("r.out");
int inside(int i,int j)
{
return i>=1 && i<=n && j>=1 && j<=m;
}
void lee(int i,int j)
{ int k,inou,jnou,pas=1,gasit;
int b[100][100]={0};
b[i][j]=1;
do
{ gasit=0;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(a[i][j]==s[pas-1] && b[i][j]==pas)
for(k=0;k<4;k++)
{ inou=i+dx[k];
jnou=j+dy[k];
if(inside(inou,jnou) && a[inou][jnou]==s[pas] && b[inou][jnou]==0)
{
gasit=1;
b[inou][jnou]=pas+1;
}
}
pas++;
}
while(gasit);
if(pas-1>maxx) maxx=pas-1;
}
int main()
{ f>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
f>>a[i][j];
f>>s;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(a[i][j]==s[0])
{
lee(i,j);
}
for(i=0;i<maxx;i++) fout<<s[i];
return 0;
}
//sau cu coada
#include<fstream>
using namespace std;
const int dx[4]={-1,1,0,0};
const int dy[4]={0,0,-1,1};
struct poz { int i,j;};
char a[100][100],s[1000];
int n,m,i,j,maxx;
ifstream f("r.in");
ofstream fout("r.out");
int inside(int i,int j)
{
return i>=1 && i<=n && j>=1 && j<=m;
}
void lee(int i, int j)
{ int k,inou,jnou,pas=1,st,dr,gasit;
poz x[10000];
int pus[100][100]={0};
x[1].i=i;
x[1].j=j;
st=dr=1;
do
{
gasit=0;
i=x[st].i;
j=x[st].j;
for(k=0;k<4;k++)
{ inou=i+dx[k];
jnou=j+dy[k];
if(inside(inou,jnou) && a[inou][jnou]==s[pas] && !pus[inou][jnou])
{
dr++;
pus[inou][jnou]=1;
x[dr].i=inou;
x[dr].j=jnou;
gasit=1;
}
}
if(gasit) pas++;
st++;
}
while(gasit || st<=dr);
if(pas>maxx) maxx=pas;
}
int main()
{ f>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
f>>a[i][j];
f>>s;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(a[i][j]==s[0])
lee(i,j);
for(i=0;i<maxx;i++) fout<<s[i];
return 0;
}
|