제출 #1300292

#제출 시각아이디문제언어결과실행 시간메모리
1300292settopTracks in the Snow (BOI13_tracks)C++20
0 / 100
1033 ms986544 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...