[202402D]哈尔滨的小狐娘

#include<bits/stdc++.h>
using namespace std;
bool f=0,vis[1001][1001],a1;
char c[1001][1001];
int n,m,a,b,s,l;
int dx[8]={-1,-1,0,1,1,1,0,-1},dy[8]={0,-1,-1,-1,0,1,1,1};
void ani(int n,int xx,int yy){
    int ans[8]{0},mi=1e9;
    for(int i=1;i<=n;i++){
        for(int j=0;j<8;j++){
            //cout<<xx<<" "<<yy<<" "<<c[xx][yy]<<endl;
            xx+=(dx[j]*i);
            yy+=(dy[j]*i);
            //cout<<xx<<" "<<yy<<" "<<c[xx][yy]<<endl;
            if(c[xx][yy]=='H')
                  ans[j]++;
            //cout<<xx<<" "<<yy<<" "<<c[xx][yy]<<endl;
            xx-=(dx[j]*i);
            yy-=(dy[j]*i);
        }
    }
    for(int i=0;i<=7;i++){
        //cout<<ans[i]<<endl;
        if(ans[i]<mi){
            mi=ans[i];
            l=i;
        }
    }
}
void w(int x1,int x,int y){
    if(c[x][y]=='H') return ;
    
    while(x1--){
        int xx=x+dx[l];
        int yy=y+dy[l];
        if(!vis[xx][yy]){
            vis[xx][yy]=1;
            if(c[xx][yy]=='H') return ;
                if(c[xx][yy]=='F'||c[xx][yy]=='P'||c[xx][yy]=='L'||c[xx][yy]=='T'||c[xx][yy]=='R'||c[xx][yy]=='B'){
                    switch(c[xx][yy]){
                        case 'F': case 'P':{
                            ani(1,xx,yy);
                            //cout<<1<<endl;
                            break;
                        }
                        case 'L': case 'T':{
                            ani(2,xx,yy);
                            //cout<<2<<" "<<c[xx][yy]<<endl;
                            break;
                        }
                        default :{
                            ani(3,xx,yy);
                            break;
                        }
                    }
                }
                else{
                    cout<<1<<" ";
                    if(xx<1||yy<1||xx>n||yy>m){
                        f=1;
                        cout<<l<<" "<<x<<" "<<y<<endl;
                        return ;
                    }
                    cout<<xx<<" "<<yy<<endl;
                }
            }
        }
    }
int main(){
    
    cin>>n>>m>>a>>b>>s;
    for(int i=0;i<=m;i++){
        c[0][i]=NULL;
        c[n+1][i]=NULL;
    }
    for(int i=0;i<=n;i++){
        c[i][0]=NULL;
        c[i][m+1]=NULL;
    }
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            cin>>c[i][j];
    vis[a][b]=1;
    for(int i=0;i<=7;i++){
        l=i;
        w(s,a,b);
        memset(vis,0,sizeof vis);
        vis[a][b]=1;
        a1=0;
    }
    if(f==0) cout<<"Poor little fox, you can't get away!";
}

WA30分

题目没截全。。。这怎么让我调。。。

@huangfeidong 图截好了

有人吗!?这有个水题解决方案!

应该要贪心做吧

so?

水题解决方案都不要了吗.............................

1 个赞