fork download
  1. #include <bits/stdc++.h>
  2. #include <iostream>
  3. #include <vector>
  4. #include <set>
  5. using namespace std;
  6. #define el endl
  7. #define dl double
  8. #define ll long long
  9. #define faster ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
  10. #define op 1005
  11. #define _c const int
  12. _c N = op;
  13. int n,m,a[N][N];
  14. bool visited[N][N];
  15. int dx[8] = {-1, -1, -1, 0, 0, 1, 1, 1};
  16. int dy[8] = {-1, 0, 1, -1, 1, -1, 0, 1};
  17. bool kt;
  18. bool board(int i1, int j1){
  19. return i1 >= 0 && i1 < n && j1 >= 0 && j1 < m;
  20. }
  21. void dfs(int i, int j, int h){
  22. visited[i][j]=true;
  23. for(int k = 0; k < 8; k++){
  24. int i1 = i + dx[k];
  25. int j1 = j + dy[k];
  26. if(!board(i1,j1)) continue;
  27. if(a[i1][j1] > h){
  28. kt = false;
  29. }
  30. if(!visited[i1][j1] && a[i1][j1]==h){
  31. dfs(i1,j1,h);
  32. }
  33. }
  34. }
  35. void inp(){
  36. cin >> n >> m;
  37. for(int i = 0; i < n; i++) for(int j = 0; j < m; j++) cin >> a[i][j];
  38. int cnt = 0;
  39. memset(visited,false,sizeof(visited));
  40. for(int i = 0; i < n; i++){
  41. for(int j = 0; j < m; j++){
  42. if(!visited[i][j]){
  43. kt =true;
  44. dfs(i,j,a[i][j]);
  45. if(kt) ++cnt;
  46. }
  47.  
  48. }
  49. }
  50. cout << cnt;
  51. }
  52. int main(){
  53. inp();
  54. faster;
  55. return 0;
  56. }
Success #stdin #stdout 0.01s 5292KB
stdin
8 7
4 3 2 2 1 0 1
3 3 3 2 1 0 1
2 2 2 2 1 0 0
2 1 1 1 1 0 0
1 1 0 0 0 1 0
0 0 0 1 1 1 0
0 1 2 2 1 1 0
0 1 1 1 2 1 0
stdout
3