求调,悬关
  • 板块题目总版
  • 楼主OIer_hzn
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/7/18 13:20
  • 上次更新2023/11/3 09:08:57
查看原帖
求调,悬关
747142
OIer_hzn楼主2023/7/18 13:20

![](https://cdn.luogu.com.cn/upload/image_hosting/adlrzmk3.png

//  main.cpp
//  问题 E山峰山谷
//
//  Created by aa on 2023/7/18.
//

#include <iostream>
using namespace std;
const int N=1e3+10;
int a[N][N];
int b[N][N];
int n;
int ans,res;
int fx[10]={
	-1,-1,-1,0,0,1,1,1
};
int fy[10]={
	-1,0,1,-1,1,-1,0,1
};
int check(int x,int y){
	bool f1=1,f2=1;
	//f1山峰
	//f2山谷
	for(int i=0;i<8;i++){
		int tx=x+fx[i];
		int ty=y+fy[i];
		if(tx>=1&&tx<=n&&ty>=1&&ty<=n){
			if(a[tx][ty]>a[x][y]){
				f1=0;
			}if(a[tx][ty]<a[x][y]){
				f2=0;
			}
		}
	}
	if(f1==0){
		return 1;
	}else if(f2==0){
		return -1;
	}
	return 0;
}
void dfs(int x,int y,int now){
	cout<<x<<" "<<y<<" "<<now<<endl;
	for(int i=0;i<8;i++){
		int tx=x+fx[i];
		int ty=y+fy[i];
		if(tx>=1&&tx<=n&&ty>=1&&ty<=n&&now==b[tx][ty]){
			b[tx][ty]=-1;
			dfs(tx,ty,now);
		}
	}
}

int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cin>>a[i][j];
			b[i][j]=a[i][j];
		}
	}for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(check(i,j)==1&&b[i][j]!=-1){
				//cout<<"f"<<" "<<a[i][j]<<endl;
				dfs(i,j,a[i][j]);
				ans++;
				b[i][j]=-1;
			}else if(check(i,j)==-1&&b[i][j]!=-1){
				//cout<<"g"<<" "<<a[i][j]<<endl;
				dfs(i,j,a[i][j]);
				res++;
				b[i][j]=-1;
			}
		}
	}
	cout<<res<<" "<<ans<<endl;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cout<<b[i][j]<<" ";
		}
		cout<<endl;
	}
	return 0;
}
2023/7/18 13:20
加载中...