RT
#include <bits/stdc++.h>
const int N=355;
using namespace std;
int n,m,s1,s2,d,sx,sy,ex,ey;
int dx[]={0,0,-1,1,1,1,-1,-1},dy[]={1,-1,0,0,1,-1,1,-1};
string s;
int v[N][N],x,tt[N][N],minn=1e9,minc1=1e9,minc2=1e9;
int f[N][N][16][16];
struct ss{int x,y,sum,c1,c2;}q1;
queue<ss>q;
void bfs()
{
int xx,yy;
// memset(f,0x3f,sizeof(f));
q.push((ss){sx,sy,0,0,0});
f[sx][sy][0][0]=1;
while(!q.empty())
{
q1=q.front();q.pop();
// cout<<q1.x<<' '<<q1.y<<' '<<q1.sum<<' '<<q1.c1<<' '<<q1.c2<<'\n';
if(q1.x==ex&&q1.y==ey)
{
if(q1.sum>minn)break;
if(q1.sum==minn)
{
minn=q1.sum;
if(q1.c1+q1.c2==minc1+minc2&&q1.c1<minc1)
minc1=q1.c1,minc2=q1.c2;
if(q1.c1+q1.c2<minc1+minc2)
minc1=q1.c1,minc2=q1.c2;
}
if(q1.sum<minn)minn=q1.sum,minc1=q1.c1,minc2=q1.c2;
continue;
}
for(int i=0;i<8;i++)
{
xx=q1.x+dx[i];yy=q1.y+dy[i];
if(xx<1||yy<1||xx>n||yy>m||v[xx][yy])continue;
if(f[xx][yy][q1.c1][q1.c2])continue;
f[xx][yy][q1.c1][q1.c2]=1;
q.push((ss){xx,yy,q1.sum+1,q1.c1,q1.c2});
}
if(q1.c1<s1)
{
for(int i=0;i<8;i++)
{
xx=q1.x+dx[i];yy=q1.y+dy[i];
if(xx<1||yy<1||xx>n||yy>m||v[xx][yy]==114514)continue;
if(f[xx][yy][q1.c1+1][q1.c2])continue;
f[xx][yy][q1.c1+1][q1.c2]=1;
q.push((ss){xx,yy,q1.sum+1,q1.c1+1,q1.c2});
}
}
if(q1.c2<s2)
{
for(int i=0;i<4;i++)
{
xx=q1.x+dx[i]*d;yy=q1.y+dy[i]*d;
if(xx<1||yy<1||xx>n||yy>m||v[xx][yy])continue;
if(f[xx][yy][q1.c1][q1.c2+1])continue;
f[xx][yy][q1.c1][q1.c2+1]=1;
q.push((ss){xx,yy,q1.sum+1,q1.c1,q1.c2+1});
}
}
if(q1.c1<s1&&q1.c2<s2)
{
for(int i=0;i<4;i++)
{
xx=q1.x+dx[i]*d;yy=q1.y+dy[i]*d;
if(xx<1||yy<1||xx>n||yy>m||v[xx][yy]==114514)continue;
if(f[xx][yy][q1.c1+1][q1.c2+1])continue;
f[xx][yy][q1.c1+1][q1.c2+1]=1;
q.push((ss){xx,yy,q1.sum+1,q1.c1+1,q1.c2+1});
}
}
}
}
void look(int x,int y,int k)
{
for(int i=0;i<=k;i++)
{
tt[max(x-i,1)][max(y-(k-i),1)]++;
tt[max(x-i,1)][min(y+(k-i),m)+1]--;
tt[min(x+i,n)][max(y-(k-i),1)]++;
tt[min(x+i,n)][min(y+(k-i),m)+1]--;
}
}
int main()
{
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
cin>>n>>m>>s1>>s2>>d;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
cin>>s;
if(s=="S"){sx=i;sy=j;}
else if(s=="T"){ex=i;ey=j;}
else if(s!=".")
{
x=0;
for(int i=0;i<s.size();i++)
x=(x<<1)+(x<<3)+(s[i]^48);
look(i,j,x-1);
v[i][j]=114514;
}
}
for(int i=1;i<=n;i++)
for(int j=1,sum=0;j<=m;j++)
{sum+=tt[i][j];v[i][j]=(sum>0);}
// for(int i=1;i<=n;i++)
// {
// for(int j=1;j<=m;j++)
// cout<<v[i][j]<<' ';
// cout<<'\n';
// }
bfs();
if(minn==1e9)cout<<"-1\n";
else cout<<minn<<' '<<minc1<<' '<<minc2<<'\n';
}
这份代码无法通过样例3,却在该题拿到了100