求救,40pts
查看原帖
求救,40pts
547908
NightTide楼主2021/8/14 18:21
#include<bits/stdc++.h>
#define INF 1000
using namespace std;
struct node{
    int x,y;
    int high; 
};
struct irr_sec{
    int l,r;
};
const int shift[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
int n,m;
int dro;
int ans,last_pos;
int city[510][510];
bool vis[510][510],last[510];
irr_sec sour[510];
void bfs(int num){
    queue<node> s;
    node now;
    now.x=1;now.y=num;now.high=city[now.x][now.y];
    sour[num].l=INF;sour[num].r=0;
    s.push(now);
    vis[now.x][now.y]=true;
    while(s.size()){
        node p=s.front();
        s.pop();
        for(int i=0;i<4;i++){
            if((p.x+shift[i][0]>0)&&(p.x+shift[i][0]<=n)&&(p.y+shift[i][1]>0)&&(p.y+shift[i][1]<=m)){
                if(!vis[p.x+shift[i][0]][p.y+shift[i][1]]&&city[p.x+shift[i][0]][p.y+shift[i][1]]<p.high){
                    vis[p.x+shift[i][0]][p.y+shift[i][1]]=true;
                    node q;
                    q.x=p.x+shift[i][0];q.y=p.y+shift[i][1];q.high=city[q.x][q.y];
                    s.push(q);
                    if(q.x==n){
                        last[q.y]=true;
                        sour[num].l=min(sour[num].l,q.y);
                        sour[num].r=max(sour[num].r,q.y);
                    }
                }
            }
        }
    }
}
bool cmp(irr_sec a,irr_sec b){
    if(a.l!=b.l) return a.l<b.l;
    else return a.r<b.r;
}
int main(){
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            scanf("%d",&city[i][j]);
        }
    }
    for(int i=1;i<=m;i++){
        memset(vis,0,sizeof(vis));
        bfs(i);
    }
    for(int i=1;i<=m;i++){
        if(!last[i]){
            dro++;
        }
    }
    if(dro){
        if(n==1) printf("1\n%d\n",dro);
        else printf("0\n%d\n",dro);
    }else{
        sort(sour+1,sour+m+1,cmp);
        for(int i=1;i<=m;i++){
            cout<<sour[i].l<<" "<<sour[i].r<<endl;
        }
        for(int i=1;i<=m;i++){
            if(last_pos>=sour[i].l&&last_pos<=sour[i].r) continue;
            ans++;
            last_pos=sour[i].r;
        }
        printf("1\n%d\n",ans);
    }
}

到底那里错了,蒟蒻求救

2021/8/14 18:21
加载中...