ju ruo

P2895 [USACO08FEB] Meteor Shower S

simonzzq @ 2023-10-23 20:02:22

连样例都没过…………

#include <bits/stdc++.h>
using namespace std;
struct ms{int xi,yi,t;}a[100010]; 
vector<ms>ss[1010]; 
struct g{int x,y,t;}l,f;
int n,z[1000][1000],s1[1000][1000];
queue<g>q; 
int main()
{   
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d%d%d",&a[i].xi,&a[i].yi,&a[i].t);
        z[a[i].xi][a[i].yi]=
        z[a[i].xi+1][a[i].yi]=z[a[i].xi-1][a[i].yi]=
        z[a[i].xi][a[i].yi+1]=z[a[i].xi][a[i].yi-1]=1;
        ss[a[i].t].push_back(a[i]);
    }
    l.t=l.x=l.y=0;
    q.push(l); 
    s1[0][0]=-1;
    while(!q.empty()) 
    {
        f=q.front();
        if(s1[f.x][f.y]==1)continue;
        if(!z[f.x][f.y])
        {
            printf("%d",f.t);
            return 0;
        }
        q.pop();
        for(auto i:ss[f.t])
            s1[i.xi][i.yi]=
            s1[i.xi+1][i.yi]=s1[i.xi-1][i.yi]=
            s1[i.xi][i.yi+1]=s1[i.xi][i.yi-1]=1;
   //     for(int i=0;i<=5;i++)
    //{
    //  for(int j=0;j<=5;j++)printf("%d ",s1[i][j]);
    //  puts(""); 
//  }
    puts("");
        if(f.x>0&&s1[f.x-1][f.y]==0)
        {
            l.x=f.x-1,l.y=f.y,l.t=f.t+1;
            q.push(l);
            s1[l.x][l.y]=-1;
        }
        if(f.x<500&&s1[f.x+1][f.y]==0)
        {
            l.x=f.x+1,l.y=f.y,l.t=f.t+1;
            q.push(l);
            s1[l.x][l.y]=-1;
        }
        if(f.y>0&&s1[f.x][f.y-1]==0)
        {
            l.x=f.x,l.y=f.y-1,l.t=f.t+1;
            q.push(l);
            s1[l.x][l.y]=-1;
        }
        if(f.y<500&&s1[f.x][f.y+1]==0)
        {
            l.x=f.x,l.y=f.y+1,l.t=f.t+1;
            q.push(l);
            s1[l.x][l.y]=-1;
        }
    }
    puts("-1");
    return 0;
}   

|