WA求调
查看原帖
WA求调
1558713
yujunchen楼主2025/7/3 11:35
#include<bits/stdc++.h>
using namespace std;
const int N=510;
int a[N][N],di[N][N],n,m;//a为海拔,di为路标 
int dnum=0;//路标数量 
int ne[4][2]={{0,1},{1,0},{-1,0},{0,-1}};
bool vis[N][N];
int d;//
struct node{
	int x,y;
	node(int x1,int y1){
		x=x1,y=y1;
	}
};
int check(int x)
{
	queue<node>q;
	q.push(node(1,1));
	vis[1][1]=1;
	while(q.size())
	{
		node num=q.front();
		q.pop();
		if(di[num.x][num.y]==1)d++;
		for(int i=0;i<4;i++)
		{
			int tx=num.x+ne[i][0];
			int ty=num.y+ne[i][1];
			if(tx>=1&&ty>=1&&tx<=m&&ty<=n&&abs(a[tx][ty]-a[num.x][num.y])<=x)
			{
				q.push(node(tx,ty));
				vis[tx][ty]=1;
				if(di[tx][ty]==1)
					d++;
			}
		}
	}
	return d;
}
int main()
{
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
 	cin>>m>>n;
 	for(int i=1;i<=m;i++)
 		for(int j=1;j<=n;j++)
 			cin>>a[i][j];
 	for(int i=1;i<=m;i++)
 		for(int j=1;j<=n;j++)
 		{
 			cin>>di[i][j];
 			if(di[i][j]==1)
 				dnum++; 
		}
 	int ans=0;
 	for(int i=1<<30;i;i>>=1)
 	{
 		if(check(ans+i)<dnum)ans+=i;
	}
	cout<<ans+1;
	return 0;
}


2025/7/3 11:35
加载中...