60分WA求助
查看原帖
60分WA求助
413801
rabbitdit楼主2021/9/1 21:46
#include<bits/stdc++.h>
using namespace std;
struct mxmn {
	int mx;
	int mn;
};
int n,m;
int num=0;
int ans=0;
int mp[505][505];
mxmn dp[505][505];
bool mk[505][505];
vector<mxmn> line;
bool cmp(mxmn a,mxmn b) {
	return a.mn<b.mn;
}
mxmn dfs(mxmn ret,int x,int y) {
	if(mk[x][y]==1) return dp[x][y];
	if(x+1<=m && mp[x+1][y]<mp[x][y]) {
		mxmn rt=dfs(ret,x+1,y);
		ret.mn=min(ret.mn,rt.mn);
		ret.mx=max(ret.mx,rt.mx);
	}
	if(x-1>=1 && mp[x-1][y]<mp[x][y]) {
		mxmn rt=dfs(ret,x-1,y);
		ret.mn=min(ret.mn,rt.mn);
		ret.mx=max(ret.mx,rt.mx);
	}
	if(y+1<=n && mp[x][y+1]<mp[x][y]) {
		mxmn rt=dfs(ret,x,y+1);
		ret.mn=min(ret.mn,rt.mn);
		ret.mx=max(ret.mx,rt.mx);
	}
	if(y-1>=1 && mp[x][y-1]<mp[x][y]) {
		mxmn rt=dfs(ret,x,y-1);
		ret.mn=min(ret.mn,rt.mn);
		ret.mx=max(ret.mx,rt.mx);
	}
	if(y==n) {
		num++;
		ret.mn=min(ret.mn,x);
		ret.mx=max(ret.mx,x);
	}
	mk[x][y]=1;
	dp[x][y]=ret;
	return ret;
}
int main() {
	scanf("%d%d",&n,&m);
	for(int i=1; i<=n; i++) for(int j=1; j<=m; j++) scanf("%d",&mp[j][i]);
	mxmn init;
	init.mn=1919810;
	init.mx=0;
	for(int i=1; i<=m; i++) if((i==1 && mp[i][1]>=mp[i+1][1]) || (i==m && mp[i][1]>=mp[i-1][1]) || (mp[i][1]>=mp[i+1][1] && mp[i][1]>=mp[i-1][1])) {
//		cout<<i<<" "<<mp[i][1]<<endl;
			line.push_back(dfs(init,i,1));
		}
//	for(int i=0; i<line.size(); i++) cout<<line[i].mn<<" ";
//	cout<<endl;
//	for(int i=0; i<line.size(); i++) cout<<line[i].mx<<" ";
//	cout<<num;
	if(num!=m) {
		cout<<0<<endl;
		cout<<m-num;
		return 0;
	}
	sort(line.begin(),line.end(),cmp);
//	for(int i=0; i<line.size(); i++) cout<<line[i].mn<<" ";
//	cout<<endl;
//	for(int i=0; i<line.size(); i++) cout<<line[i].mx<<" ";
//	cout<<endl;
	int mn=1;
	int mx=0;
	int ind=0;
	while(mn<=m) {
//		for (int i = 1; i <= m; i++) {
		if(line[ind].mn>mn) {
			ans++;
			mn=mx;
		}
		mx=max(line[ind++].mx, mx);
//		ans++;
//		}
//		for (int i = 0; i < m; i++) {
//			if(line[i].mn<=mn) {
//				mx=max(line[i].mx, mx);
//			}
//			
//			ans++;
//				mn=mx + 1;
////			ans++;
//		}
	}
	cout<<1<<endl;
	cout<<ans;
	return 0;
}

不知道是不是区间覆盖写错了 求解答QAQ

2021/9/1 21:46
加载中...