#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
int n,m,s,dd;
const int d[5][2]={{0,0},{0,-1},{0,1},{-1,0},{1,0}};
int salx[300],saly[300],map[1010][1010],dlx[300],dly[300],ans=0;
int dis(int x1,int y1,int x2,int y2){
return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))+1e-6;
}
void dfs(int maxn,int x,int y,int away,int time){
if (time>maxn) return;
if (away>dd) return;
if (x==dlx[time] && y==dly[time]){
ans=time;
}
for (int i=0;i<=4;i++){
int xx=x+d[i][0],yy=y+d[i][1];
if (map[yy][xx]==1) continue;
if (dis(xx,yy,salx[time],saly[time])>s) dfs(maxn,xx,yy,away+1,time+1);
else dfs(maxn,xx,yy,0,time+1);
}
}
int main(){
scanf("%d%d%d%d",&n,&m,&s,&dd);
for (int i=1;i<=n;i++){
for (int j=1;j<=m;j++){
char ch;
scanf("%c",&ch);
if (ch=='1') map[i][j]=1;else map[i][j]=0;
}
getchar();
}
int saly1,salx1,dly1,dlx1;
scanf("%d%d%d%d",&saly1,&salx1,&dly1,&dlx1);
if (saly1==dly1 && salx1==dlx1){
cout << 0 << endl;
return 0;
}
char ch[200];
cin >> ch;int len=strlen(ch);
salx[0]=salx1;saly[0]=saly1;dlx[0]=dlx1;dly[0]=dly1;
for (int i=0;i<=n+1;i++) map[0][i]=1;
for (int i=0;i<=m+1;i++) map[i][0]=1;
for (int i=0;i<=n+1;i++) map[m+1][i]=1;
for (int i=0;i<=m+1;i++) map[i][n+1]=1;
for (int i=1;i<=110;i++){
int x=(i-1)%len;
salx[i]=salx[i-1]+d[ch[x]-48][0];
saly[i]=saly[i-1]+d[ch[x]-48][1];
if (map[saly[i]][salx[i]]==1) saly[i]=saly[i-1],salx[i]=salx[i-1];
}
getchar();
cin >> ch;len=strlen(ch);
for (int i=1;i<=110;i++){
int x=(i-1)%len;
dlx[i]=dlx[i-1]+d[ch[x]-48][0];
dly[i]=dly[i-1]+d[ch[x]-48][1];
if (map[dly[i]][dlx[i]]==1) dly[i]=dly[i-1],dlx[i]=dlx[i-1];
}
for (int i=1;i<=100;i++) {
dfs(i,salx1,saly1,0,1);
if (ans!=0) break;
}
cout << ans << endl;
return 0;
}
为什么在本地可以通过但是评测机上会tle