#include<bits/stdc++.h>
using namespace std;
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
#define int long long
#define ordered_set tree<int, null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update>
#define S second
#define F first
#define fall(i,a,n) for(int i=a;i<=n;i++)
#define rfall(i,a,n) for(int i=a;i>=n;i--)
#define pb push_back
#define all(x) x.begin(),x.end()
#define lsb(x) (x & -x)
#define sz(x) (int)x.size()
const int MAXN=4e3+10;
const int MAXL=22;
const int inf=1e17;
const int MOD=1e9+7;
typedef pair<int,int> pii;
typedef tuple<int,int,int> trio;
typedef tuple<int,int,int,int> squad;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
int n,m,ans=1;
char v[MAXN][MAXN];
bool z[MAXN][MAXN];
void dfs(int i,int j){
z[i][j]=1;
if(i>1 && v[i-1][j]==v[i][j] && !z[i-1][j]) dfs(i-1,j);
if(j>1 && v[i][j-1]==v[i][j] && !z[i][j-1]) dfs(i,j-1);
if(i!=n && v[i+1][j]==v[i][j] && !z[i+1][j]) dfs(i+1,j);
if(j!=m && v[i][j+1]==v[i][j] && !z[i][j+1]) dfs(i,j+1);
}
int32_t main(){
std::ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin>>n>>m;
fall(i,1,n)
fall(j,1,m) cin>>v[i][j];
fall(i,1,n)
fall(j,1,m){
if(v[i][j]==v[1][1] && !z[i][j]){
ans++;
dfs(i,j);
}
}
cout<<ans<<"\n";
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |