样例过了,但是只有10分
查看原帖
样例过了,但是只有10分
727348
Dreamcatching楼主2023/10/17 17:22

测试点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;
}
2023/10/17 17:22
加载中...