为什么60pts?

P1141 01迷宫

corner_xiejunqi @ 2024-12-01 18:25:12


#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;
}

|