wa了三个,问:问题在哪
查看原帖
wa了三个,问:问题在哪
847559
Chtholly__Nota楼主2024/7/22 15:35

代码

#include <bits/stdc++.h>
using namespace std;


int n,m;
int a[600][600],vis[600][600],js[600];

struct node{
	int res;
	map<int,int> ha;
}ans[600];

int dx[4]={0,1,-1,0};
int dy[4]={-1,0,0,1};


bool cmp(node x,node y){
	if(x.res==y.res){
		for(int i=1;i<=m;i++){
			if(x.ha[i]>y.ha[i]) return 1;
			if(x.ha[i]<y.ha[i]) return 0;
		}
	}
	return x.res>y.res;
}


void bfs(int x,int y){
	vis[x][y]=1;
	queue<pair<int,int> > q;
	q.push(make_pair(x,y));
	while(!q.empty()){
		pair<int,int> t=q.front();
		q.pop();
		if(t.first==1){
			if(!ans[t.second].ha[y]){
				ans[t.second].res++;
				ans[t.second].ha[y]=1;
			}
		}
		for(int i=0;i<4;i++){
			int tx=dx[i]+t.first;
			int ty=dy[i]+t.second;
			if(tx>=1 && tx<=n && ty>=1 && ty<=m && !vis[tx][ty] && a[tx][ty]>a[t.first][t.second]){
				q.push(make_pair(tx,ty));
				if(tx>1) vis[tx][ty]=1;
			}
		}
	}
	return ;
}



int main() {
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>a[i][j];
		}
	}

	for(int i=1;i<=m;i++){
		memset(vis,0,sizeof vis);
		bfs(n,i);
	}
	sort(ans+1,ans+1+m,cmp);
	int fg=0; 
	for(int i=1;i<=m;i++){
		int f=1,f1=0;
		for(int j=1;j<=m;j++){
			if(!js[j]){
				f=0;
				break;
			}
		}
		if(f){
			cout<<1<<endl<<i-1-fg;
			return 0;
		}
		for(int j=1;j<=m;j++){
			if(ans[i].ha[j]){
				if(js[j]) f1++; 
				js[j]++;
			}
		}
		if(f1==ans[i].res) fg++;
	}
	int rres=0;
	for(int j=1;j<=m;j++){
		if(!js[j]) rres++;
	}
	cout<<0<<endl<<rres;
	return 0;
}
2024/7/22 15:35
加载中...