#3#6WA求助qwq
查看原帖
#3#6WA求助qwq
1247655
111111lcr楼主2024/5/1 19:37
#include<bits/stdc++.h>
using namespace std;
const int N=1010;
int dx[]={-1,-1,-1,0,0,1,1,1};
int dy[]={-1,0,1,-1,1,-1,0,1};
int a[N][N],n,ff,gg,s;
bool f[N][N],g[N][N],p,q;
void sf1(int x,int y){
	if(f[x][y]==true) return;
	p=true;
	f[x][y]=true;
	for(int i=0;i<=7;i++) 
		if(x+dx[i]>=1&&x+dx[i]<=n&&y+dy[i]>=1&&y+dy[i]<=n)
			if(a[x+dx[i]][y+dy[i]]>=a[x][y])
				sf1(x+dx[i],y+dy[i]);
}
void sf2(int x,int y){
	if(f[x][y]==true) return;
	p=true;
	f[x][y]=true;
	for(int i=0;i<=7;i++) 
		if(x+dx[i]>=1&&x+dx[i]<=n&&y+dy[i]>=1&&y+dy[i]<=n)
			if(a[x+dx[i]][y+dy[i]]<=a[x][y])
				sf2(x+dx[i],y+dy[i]);
}
void sg1(int x,int y){
	if(g[x][y]==true) return;
	p=true;
	g[x][y]=true;
	for(int i=0;i<=7;i++)
		if(x+dx[i]>=1&&x+dx[i]<=n&&y+dy[i]>=1&&y+dy[i]<=n)
			if(a[x+dx[i]][y+dy[i]]<=a[x][y])
				sg1(x+dx[i],y+dy[i]);
}
void sg2(int x,int y){
	if(g[x][y]==true) return;
	p=true;
	g[x][y]=true;
	for(int i=0;i<=7;i++)
		if(x+dx[i]>=1&&x+dx[i]<=n&&y+dy[i]>=1&&y+dy[i]<=n)
			if(a[x+dx[i]][y+dy[i]]>=a[x][y])
				sg2(x+dx[i],y+dy[i]);
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++){
			cin>>a[i][j];
			if(i==1&&j==1){
				s=a[i][j];
				continue;
			}
			if(a[i][j]!=s){
				s=-1;
			}
		}
	if(s!=-1){
		cout<<1<<" "<<1;
		return 0;
	}	
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			q=true;
			for(int k=0;k<=7;k++){
				if(i+dx[k]>=1&&i+dx[k]<=n&&j+dy[k]>=1&&j+dy[k]<=n){
					if(a[i+dx[k]][j+dy[k]]>a[i][j]){
						q=false;
						break;
					}
				}	
			}
			if(q==true){
				p=false;
				sf1(i,j);sf2(i,j);
				if(p==true) ff++;
			}
			q=true;
			for(int k=0;k<=7;k++){
				if(i+dx[k]>=1&&i+dx[k]<=n&&j+dy[k]>=1&&j+dy[k]<=n){
					if(a[i+dx[k]][j+dy[k]]<a[i][j]){
						q=false;
						break;
					}
				}	
			}
			if(q==true){
				p=false;
				sg1(i,j);sg2(i,j);
				if(p==true) gg++;
			}
		}
	}
	
	cout<<ff<<" "<<gg;
	return 0;
}

#3 #6为啥wa了!?虽然写的很石但是不懂错哪qwq

2024/5/1 19:37
加载中...