莫名90求调(第三个点WA)
查看原帖
莫名90求调(第三个点WA)
756805
xuweiyi楼主2023/2/2 22:03

蒟蒻调了好久没找到问题qwq

#include<bits/stdc++.h>
using namespace std;
int n,a[1002][1002],ab[1002][1002],t[3];
int op[9][2]={{0,0},{-1,0},{1,0},{0,-1},{0,1},{-1,1},{1,-1},{-1,-1},{1,1}};
int dfs(int i,int j,int f){
   if(a[i][j]==f) ab[i][j]=1;
   else{
   	return int(a[i][j]<f);//1是山,0是谷。 
   }
   int bol=-2;
   for(int q=1;q<=8;++q){
   	int x=i+op[q][0],y=j+op[q][1];
   	if(x>0&&x<=n&&y>0&&y<=n&&(ab[x][y]&&a[x][y]!=f||!ab[x][y])){
   		int k=dfs(x,y,f);
   		if(k==-2){}
   		else if(bol==-2) bol=k;
   		else if(k==-1||bol==-1){return -1;}
   		else{
   			if(bol!=k) return -1;
   		}
   	} 
   }
   //cout<<bol<<endl;
   return bol;
} 
int main(){
   cin>>n;int ta;
   if(n==0) cout<<0<<" "<<0;
   if(!n) return 0;
   for(int i=1;i<=n;++i){
   	for(int j=1;j<=n;++j){
   		scanf("%d",&a[i][j]);
   		if(i==j&&i==1) ta=a[i][j];
   		if(ta!=a[i][j]) ta=-999;
   	} 
   } 
   if(ta!=-999){
   	cout<<1<<" "<<1;
   	return 0;
   }
   for(int i=1;i<=n;++i){
   	for(int j=1;j<=n;++j){
   		if(!ab[i][j]) t[(dfs(i,j,a[i][j]))+1]++;
   	} 
   }
   cout<<t[2]<<" "<<t[1];
   return 0;
}
2023/2/2 22:03
加载中...