求调thx赏3关注
查看原帖
求调thx赏3关注
528867
Paris_Commune楼主2023/1/12 15:28

rt,心态已炸裂

#include <bits/stdc++.h>
using namespace std;
int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};
bool vis[505][505],awa;
int h[505][505],l[505][505],r[505][505],cnt;
int n,m;
void dfs(int x,int y){
	vis[x][y]=1;
	for(int i=0;i<4;i++){
		int x1=dx[i]+x,y1=dy[i]+y;
		if(y1<1||y1>m||x1<1||x1>n||h[x][y]<=h[x1][y1])continue;
		if(!vis[x1][y1])dfs(x1,y1);
		l[x][y]=min(l[x1][y1],l[x][y]);
		r[x][y]=max(r[x1][y1],r[x][y]);
	}
}
int main(){ 
	memset(l,20000000,sizeof(l)); 
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>h[i][j];
		}
	}
	for(int j=1;j<=m;j++){
		l[n][j]=r[n][j]=j;
	}
	for(int i=1;i<=m;i++){
		if(!vis[1][i])dfs(1,i);
	}
	for(int i=1;i<=m;i++){
		if(!vis[n][i]){
			awa=1;
			cnt++;
		}
	}
	if(awa){
		cout<<"0\n"<<cnt;
		return 0;	
	}
	cnt=0;
	int ll=1,rr=r[1][1];
	while(ll<=m){
		for(int i=1;i<=m;i++){
			if(l[i][1]<=ll){
				cout<<rr<<' '<<r[1][i]<<'\n';
				rr=max(rr,r[1][i]);
			}
		}
		ll=rr+1;
		cout<<ll<<'\n'; 
		cnt++;
	}
	cout<<"1\n"<<cnt;
	return 0;
}
2023/1/12 15:28
加载中...