4 条题解

  • 0
    @ 2025-11-28 8:41:01

    BFS

    ll n,m;
    const ll Max1=1005;
    char t[Max1][Max1];
    ll pd[Max1][Max1];
    ll dx[4]={0,0,1,-1},dy[4]={1,-1,0,0};
    
    void bfs(ll x,ll y)
    {
      ll ans=1;
      vector<pair<ll,ll>>jyh;
      queue<pair<ll,ll>>dl;
      dl.push(make_pair(x,y));
      jyh.push_back(make_pair(x,y));
      pd[x][y]=1;
      while(!(dl.empty()))
      {
      	ll x1,y1;
      	x1=dl.front().first,y1=dl.front().second;
      	dl.pop();
      	for(int i=0;i<4;i++)
        {
          if(((x1+dx[i]>=1&&x1+dx[i]<=n)&&(y1+dy[i]>=1&&y1+dy[i]<=n))&&t[x1][y1]!=t[x1+dx[i]][y1+dy[i]]&&pd[x1+dx[i]][y1+dy[i]]==0)
          {
            ans++;
            dl.push(make_pair(x1+dx[i],y1+dy[i]));
            jyh.push_back(make_pair(x1+dx[i],y1+dy[i]));
            pd[x1+dx[i]][y1+dy[i]]=1;
          }
        }
      }
      for(auto i:jyh)
      	pd[i.first][i.second]=ans;
      return ;
    }
    int main() 
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        cin>>n>>m;
        for(int i=1;i<=n;++i)
          for(int j=1;j<=n;++j)
            cin>>t[i][j];
        while(m--)
        {
          ll x,y;
          cin>>x>>y;
          if(pd[x][y]==0)
            bfs(x,y);
          cout<<pd[x][y]<<'\n';
        }
        return 0;
    } 
    
    

    信息

    ID
    1095
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    递交数
    93
    已通过
    8
    上传者