测试点1自己电脑上过了,但显示Wrong Answer.wrong answer Too short on line 1.
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<cmath>
using namespace std;
const int lx[5]={0,-1,1,0,0};
const int ly[5]={0,0,0,-1,1};
int n,m,s,d,c[55][55],qx,qy,zx,zy,nax,nay,nsx,nsy,nkx,nky,nle,ndis,tax,tay,tsx,tsy,tkx,tky,lens,lenk;
bool vis[55][55];
string sa,kong;
struct node{
int ax,ay,sx,sy,kx,ky,le,dis;
};
queue<node>q;
node now,nex;
inline int read(){
int s=0,w=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){s=s*10+ch-'0';ch=getchar();}
return s*w;
}
bool check(int x,int y,int xx,int yy){
return 1.0*(sqrt((x-xx)*(x-xx)+(y-yy)*(y-yy)))<=1.0*d;
}
void bfs(){
q.push((node){qx,qy,qx,qy,zx,zy,0,0});
while(!q.empty()){
now=q.front();
q.pop();
nax=now.ax;nay=now.ay;nsx=now.sx;nsy=now.sy;nkx=now.kx;nky=now.ky;nle=now.le;ndis=now.dis;
if(vis[nax][nay]) continue;
vis[nax][nay]=1;
if(nax==nkx&&nay==nky){
printf("%d\n",ndis);
return;
}
tsx=nsx+lx[sa[ndis%lens]-'0'];
tsy=nsy+ly[sa[ndis%lens]-'0'];
if(tsx<1||tsx>n||tsy<1||tsy>m||c[tsx][tsy]==1) tsx=nsx,tsy=nsy;
tkx=nkx+lx[kong[ndis%lenk]-'0'];
tky=nky+ly[kong[ndis%lenk]-'0'];
if(tkx<1||tkx>n||tky<1||tky>m||c[tkx][tky]==1) tkx=nkx,tky=nky;
for(int i=0;i<=4;i++){
tax=nax+lx[i];
tay=nay+ly[i];
if(tax<1||tax>n||tay<1||tay>m||c[tax][tay]==1) continue;
if(check(tax,tay,tsx,tsy)){
q.push((node){tax,tay,tsx,tsy,tkx,tky,0,ndis+1});
}else{
if(nle+1<=s){
q.push((node){tax,tay,tsx,tsy,tkx,tky,nle+1,ndis+1});
}
}
}
}
}
int main(){
n=read();m=read();s=read();d=read();
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
c[i][j]=getchar()-'0';
}
}
qx=read();qy=read();zx=read();zy=read();
getline(cin,sa);
getline(cin,sa);
getline(cin,kong);
lens=sa.size();
lenk=kong.size();
if(qx==zx&&qy==zy){
printf("0\n");
return 0;
}
bfs();
return 0;
}