求助, #14测试点说啥过不了 ,蒟蒻枯了

P2895 [USACO08FEB] Meteor Shower S

jixiang @ 2021-08-18 18:07:06

#include<bits/stdc++.h>
using namespace std;
#define x first
#define y second
int dirx[5]={0,0,0,-1,1};
int diry[5]={0,-1,1,0,0};
typedef pair<int ,int >pii;
queue<pii>q;
int m;
int s[302][302];
int t[302][302];

int bfs()
{
    q.push({0,0});
    int sx,sy,xx,yy;

    while (!q.empty())
    {
        pii tx=q.front();
        q.pop();
        sx=tx.x;
        sy=tx.y;

        for(int i=1;i<5;i++){
            xx=sx+dirx[i];
            yy=sy+diry[i];
            if(xx<0||xx>300||yy<0||yy>300)continue;

            if(!t[xx][yy])
            {
                t[xx][yy]=t[sx][sy]+1;
                if(s[xx][yy]==0) return t[xx][yy];
                else if(t[xx][yy]<s[xx][yy])q.push({xx,yy});
            }

        }
    }
    return -1;
}

int main()
{
    cin>>m;
    int aa,bb,jj;
    int i,j;
    for(int k=1;k<=m;k++)
    {
        cin>>i>>j>>jj;
        if(jj==0)jj=-1;

        for(int op=0;op<5;op++){
            aa=i+dirx[op];
            bb=j+diry[op];
            if(aa<0||aa>300||bb<0||bb>300)continue;

            if(s[aa][bb]==0)s[aa][bb]=jj;
            else s[aa][bb]=min(s[aa][bb],jj);

    }

    }
    cout<<bfs();

}

by 崔化博 @ 2021-08-18 18:12:45

帮你改好了


#include<bits/stdc++.h>
using namespace std;
#define x first
#define y second
int dirx[5]={0,0,0,-1,1};
int diry[5]={0,-1,1,0,0};
typedef pair<int ,int >pii;
queue<pii>q;
int m;
int s[302][302];
int t[302][302];

int bfs()
{
    q.push({0,0});
    int sx,sy,xx,yy;

    while (!q.empty())
    {
        pii tx=q.front();
        q.pop();
        sx=tx.x;
        sy=tx.y;

        for(int i=1;i<5;i++){
            xx=sx+dirx[i];
            yy=sy+diry[i];
            if(xx<0||xx>302||yy<0||yy>302)continue;

            if(!t[xx][yy])
            {
                t[xx][yy]=t[sx][sy]+1;
                if(s[xx][yy]==0) return t[xx][yy];
                else if(t[xx][yy]<s[xx][yy])q.push({xx,yy});
            }

        }
    }
    return -1;
}

int main()
{
    cin>>m;
    int aa,bb,jj;
    int i,j;
    for(int k=1;k<=m;k++)
    {
        cin>>i>>j>>jj;
        if(jj==0)jj=-1;

        for(int op=0;op<5;op++){
            aa=i+dirx[op];
            bb=j+diry[op];
            if(aa<0||aa>300||bb<0||bb>300)continue;

            if(s[aa][bb]==0)s[aa][bb]=jj;
            else s[aa][bb]=min(s[aa][bb],jj);

    }

    }
    cout<<bfs();

}

|