AC

键盘敲碎夜深沉,代码如麻乱假真  •  2天前


/*
保证表示不属于路径的最小非负整数为x的情况下,使得x最大
比x小的格子必须全部经过,比x大的格子随意
*/
#include<bits/stdc++.h>
using namespace std;
int n,m;
vector<int> a[1000005];
bool check(int mid){		//检查是否可以保证小于mid的格子全部经过
	//换为考虑是否存在左下和右上(绝对不能走)的情况
	int lastj=0;
	for(int i=1;i<=n;i++){
		for(int j=0;j<m;j++){
			if(a[i][j]<mid){
				if(j>=lastj) lastj=j;
				else return false;
			}
		}
	}
	return true;
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			int s;
			cin>>s;
			a[i].push_back(s);
		}
	}
	int left=0,right=n*m-1,ans=0;
	while(left<=right){
		int mid=(left+right)/2;
		if(check(mid)){
			ans=mid;
			left=mid+1;
		}else right=mid-1;
	}
	cout<<ans<<"\n";
	return 0;
}


评论:

请先登录,才能进行评论