求助
查看原帖
求助
335136
LordLaffey楼主2020/10/24 18:14

评测记录

感谢大佬

#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#define ll long long
using namespace std;
const int dx[8]={-1,1,0,0,-1,1,-1,1};
const int dy[8]={0,0,-1,1,-1,-1,1,1};
int n;
ll high[1010][1010];
int nz[100000010][2];
bool be[1010][1010];
bool v[1010][1010];
ll ans_f,ans_g;

struct node{
	
	int x,y;
	
}_find;
queue<node> q;

node pu(int _x,int _y){
	
	node a;
	a.x=_x;
	a.y=_y;
	return a;
	
}

void bfs(int sx,int sy,int _or){
	
	while(!q.empty())
		q.pop();
	int s=0;
	q.push(pu(sx,sy));
	nz[++s][0]=sx,nz[s][1]=sy;
	while(!q.empty())
	{
		_find=q.front();
		q.pop();
		
		for(int i=0;i<8;i++)
		{
			int nx=_find.x+dx[i];
			int ny=_find.y+dy[i];
			
			if(nx<=0||nx>n||ny<=0||ny>n)
				continue;
			
			if((high[nx][ny]>high[_find.x][_find.y]&&_or==1)||(high[nx][ny]<high[_find.x][_find.y]&&_or==0))
				return ;
				
			if((high[nx][ny]==high[_find.x][_find.y])&&!v[nx][ny])
			{
				nz[++s][0]=nx,nz[s][1]=ny;
				v[nx][ny]=true;
				q.push(pu(nx,ny));
			}
		}
	}
	
	for(int i=1;i<=s;i++)
		be[nz[i][0]][nz[i][1]]=true;
	
	if(_or==1)
	ans_f++;
	else
	ans_g++;
	
}

int main(){
	
    bool flag=true;
	scanf("%d",&n);
	
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			scanf("%lld",&high[i][j]);
			
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			if(be[i][j])
				continue;	
			
			bfs(i,j,1);
		}
	}
	
	memset(v,false,sizeof(v));
	
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			if(be[i][j])
				continue;
				
			bfs(i,j,0);
            flag=false;
		}
	}
	
    if(flag)
        printf("1 1");
    else
	    printf("%lld %lld",ans_f,ans_g);
	
	return 0;
	
}
2020/10/24 18:14
加载中...