#include <vector>
#include <string>
#include <queue>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <bit>
#include <bitset>
using namespace std;
#define loop(i,x) for(int i=0;i<x;i++)
#define loop2(i,x,n) for(int i=x;i<n;i++)
char grid[501][501];
bool visited[501][501];
int dx[]={0,0,1,-1};
int dy[]={-1,1,0,0};
int main(){
    int h,w;
    cin>>h>>w;
    loop(i,h){
        loop(j,w){
            grid[i][j]='.';
        }
    }
    loop(i,h){
        loop(j,w){
            cin>>grid[i][j];
        }
    }
    deque<pair<int,int>> q;
    int m=0;
    q.push_back({0,0});
    while (q.size()){
        auto c=q.front();
        q.pop_front();
        visited[c.first][c.second]=true;
        loop(i,4){
            if(0<=c.first+dy[i] && c.first+dy[i]<h && 0<c.second+dx[i] && c.second+dx[i]<w && !visited[c.first+dy[i]][c.second+dx[i]] && grid[c.first+dy[i]][c.second+dx[i]]!=grid[c.first][c.second] && grid[c.first+dy[i]][c.second+dx[i]]!='.'){
                q.push_back({c.first+dx[i],c.second+dy[i]});
                m++;
            }
            else if(0<=c.first+dy[i] && c.first+dy[i]<h && 0<c.second+dx[i] && c.second+dx[i]<w && !visited[c.first+dy[i]][c.second+dx[i]] && grid[c.first+dy[i]][c.second+dx[i]]==grid[c.first][c.second]&& grid[c.first+dy[i]][c.second+dx[i]]!='.'){
                q.push_front({c.first+dx[i],c.second+dy[i]});
            }
        }
    }
    cout<<m<<'\n';    
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |