蒟蒻求调

P2895 [USACO08FEB] Meteor Shower S

lingquan @ 2024-09-24 17:23:20

代码如下\ 不知道为什么,搜的点似乎压不进队列


#include <bits/stdc++.h>
using namespace std;
int M;
bool b[1005][1005];
bool die[1005][1005];
int dx[5]={0,0,1,-1};
int dy[5]={1,-1,0,0};
int ans=-1;

struct node{
    int x,y,t;
}a[50005];

bool cmp(node a,node b){
    return a.t<b.t?a.t<b.t:a.x<b.x;
}

void bfs(){
    int now=0;
    queue<node> q;
    q.push({0,0,0});
    b[0][0]=1;
    while(q.size()){
        node p=q.front();
        q.pop();
        while(a[now].t==p.t){
            b[a[now].x][a[now].y]=1;
            for(int i=0;i<4;i++){
                int x=a[now].x+dx[i],y=a[now].y+dy[i];
                if(x>=0 && y>=0){
                    b[x][y]=1;
                }
            }
            now++;
        }
//      for(int i=0;i<=5;i++){
//          for(int j=0;j<=5;j++){
//              cout<<die[i][j]<<" ";
//          }
//          cout<<endl;
//      }
//      cout<<endl;
        for(int i=0;i<4;i++){
            int x=p.x+dx[i];
            int y=p.y+dy[i];
            if(b[x][y]==0 && x>=0 && y>=0){
                if(die[x][y]==0){
                    ans=p.t;
                    return;
                }
                q.push({x,y,p.t+1});
                b[x][y]=1;
            }
        }
    }
    return;
}

int main(){
    scanf("%d",&M);
    for(int i=1;i<=M;i++){
        scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].t);
        die[a[i].x][a[i].y]=1;
        for(int j=0;j<4;j++){
            int x=a[i].x+dx[j];
            int y=a[i].y+dy[j];
            if(x>=0 && y>=0){
                die[x][y]=1;
            }
        }
    }
    sort(a+1,a+1+M,cmp);
    bfs();
    printf("%d",ans);
    return 0;
}
```cd

by lingquan @ 2024-09-30 18:56:11

已过


|