社区讨论
daolao求助16分
P1036[NOIP 2002 普及组] 选数参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @lo8au68p
- 此快照首次捕获于
- 2023/10/27 15:35 2 年前
- 此快照最后确认于
- 2023/10/27 15:35 2 年前
CPP
#include <bits/stdc++.h>
using namespace std;
int mat[505][505];
int p[250005][2];
int book[505][505];
int n,m,cnt,sx,sy;
int nxt[4][2]={0,1,0,-1,1,0,-1,0};
void dfs(int x,int y,int D){
for(int i=0;i<4;i++){
int nx = x+nxt[i][0];
int ny = y+nxt[i][1];
if(nx>=1 && nx<=n && ny>=1 && ny<=m){
if(book[nx][ny]==0 && abs(mat[x][y]-mat[nx][ny])<=D){
book[nx][ny] = 1;
dfs(nx,ny,D);
}
}
}
}
int check(int x){
memset(book,0,sizeof(book));
dfs(sx,sy,x);
for(int i=1;i<=cnt;i++){
if(book[p[i][0]][p[i][1]]==0){
return 0;
}
}
return 1;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>mat[i][j];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
int x;
cin>>x;
if(x==1){
p[cnt++][0]=i;
p[cnt][1]=j;
sx=i;
sy=j;
}
}
}
int l=0,r=1000000000;
int ans=0;
while(l<=r){
int mid=(l+r)/2;
if(check(mid)==1){
ans=mid;
r=mid-1;
}
else{
l=mid+1;
}
}
cout<<ans<<endl;
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...