为什么60pts?
查看原帖
为什么60pts?
907430
corner_xiejunqi楼主2024/12/1 18:25

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e3+10;
int n,m;
string g1[N];
int g[N][N];
int ans=0;
int dis[4][2]={0,1,0,-1,1,0,-1,0};
int vis[N][N],av[N][N];
int t=1;
inline void bfs(int x,int y){
	queue<pair<int,int> > q;
	q.push(make_pair(x,y));
	vis[x][y]=1;
	ans=1;
	while(!q.empty()){
		int now_x=q.front().first;
		int now_y=q.front().second;
		q.pop();
		av[now_x][now_y]=t;
		for(int i=0;i<4;i++){
			int xx=now_x+dis[i][0];
			int yy=now_y+dis[i][1];
			if(xx>=1 && yy>=1 && xx<=n && yy<=n && g[xx][yy]!=g[now_x][now_y] && !vis[xx][yy]){
				vis[xx][yy]=1;
				q.push(make_pair(xx,yy));
				ans++;
			}
		}
	}
	return;
}
int sum[N];
signed main(){
	// step 1、读题、声明变量
	cin.tie(0);cout.tie(0);
	ios::sync_with_stdio(false);
	// step 2、输入
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	    cin>>g1[i];
	for(int i=1;i<=n;i++){
		for(int j=0;j<n;j++){
			g[i][j+1]=g1[i][j]-'0';
		}
	}
	// step 3、处理
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(!vis[i][j]){
				bfs(i,j);
				sum[t]=ans;
				t++;
			}
		}
	}
	int x,y;
	while(m--){
		cin>>x>>y;
		cout<<sum[av[x][y]]<<'\n';
	}
	// step 4、输出
	
	return 0;
}
2024/12/1 18:25
加载中...