救救孩子,被T飞了
查看原帖
救救孩子,被T飞了
278259
RemiliaScar1et楼主2020/8/7 09:15

RT,实在想不出优化了

#include <bits/stdc++.h>
using namespace std;
struct node
{
	int x,y;
};
int dx[10]={0,0,1,1,-1,-1,1,-1};
int dy[10]={1,-1,1,-1,1,-1,0,0};
int mp[1010][1010];
bool ms[1010][1010];
queue<node> q;
int n;
int hyp=0,low=0;

void bfs(int x,int y)
{
	while(!q.empty()) q.pop();
	q.push({x,y});
	ms[x][y]=1;
	int h=1,l=1;
	while(!q.empty())
	{
		node w=q.front();
		q.pop();
		ms[w.x][w.y]=1;
		for(int i=0;i<8;i++)
		{
			int xx=w.x+dx[i],yy=w.y+dy[i];
			if(xx>0&&xx<=n&&yy>0&&yy<=n)
			{
				if(mp[xx][yy]<mp[w.x][w.y])
				{
					l=0;
				}
				if(mp[xx][yy]>mp[w.x][w.y])
				{
					h=0;
				}
				if(mp[xx][yy]==mp[w.x][w.y]&&!ms[xx][yy])
				{
					q.push({xx,yy});
				}
			}
		}
	}
	hyp+=h,low+=l;
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			cin>>mp[i][j];
		}
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			if(!ms[i][j])
			{
				bfs(i,j);
			}
		}
	}
	cout<<hyp<<' '<<low;
	return 0;
}
2020/8/7 09:15
加载中...