Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <cstring>
- using namespace std;
- int n,m;
- char c[40010];
- int s[40010][5];
- bool used[40010];
- void deep (int x);
- int main ()
- {
- //freopen ("input.txt","r",stdin);
- //freopen ("output.txt","w",stdout);
- int i,k = 0,j;
- cin>>m>>n;
- for (i = 1; i <= n*m; i ++)
- cin>>c[i];
- if (c[1] != '.')
- {
- if (c[2] != '.')
- s[1][1] = 2;
- if (c[n+1] != '.')
- s[1][2] = n+1;
- }
- if (c[n] != '.')
- {
- if (c[n-1] != '.')
- s[n][1] = 2;
- if (c[n+n] != '.')
- s[n][2] = n+n;
- }
- if (c[n*(m-1)+1] != '.')
- {
- if (c[n*(m-1)+1-n] != '.')
- s[n*(m-1)+1][1] = n*(m-1)+1-n;
- if (c[n*(m-1)+2] != '.')
- s[n*(m-1)+1][2] = n*(m-1)+2;
- }
- if (c[n*m] != '.')
- {
- if (c[n*m-1] != '.')
- s[n*m][1] = n*m-1;
- if (c[n*m-n] != '.')
- s[n*m][2] = n*m-n;
- }
- for (i = 2; i <= n-1; i ++)
- if (c[i] != '.')
- {
- if (c[i-1] != '.')
- s[i][1] = i-1;
- if (c[i+1] != '.')
- s[i][2] = i+1;
- if (c[n+i] != '.')
- s[i][3] = n+i;
- }
- for (i = n+1; i <= n*(m-2)+1; i +=n)
- if (c[i] != '.')
- {
- if (c[i-n] != '.')
- s[i][1] = i-n;
- if (c[i+n] != '.')
- s[i][2] = i+n;
- if (c[i+1] != '.')
- s[i][3] = i+1;
- }
- for (i = n*(m-1)+2; i <= n*m-1; i ++)
- if (c[i] != '.')
- {
- if (c[i-1] != '.')
- s[i][1] = i-1;
- if (c[i+1] != '.')
- s[i][2] = i+1;
- if (c[i-n] != '.')
- s[i][3] = i-n;
- }
- for (i = n*2; i <= n*(m-1); i +=n)
- if (c[i] != '.')
- {
- if (c[i-n] != '.')
- s[i][1] = i-n;
- if (c[i+n] != '.')
- s[i][2] = i+n;
- if (c[i-1] != '.')
- s[i][3] = i-1;
- }
- for (i = n+2; i <= n*(m-1)-1; i ++)
- if ((c[i] != '.') && (i%n != 0) && (i%n != 1))
- {
- if (c[i-1] != '.')
- s[i][1] = i-1;
- if (c[i+1] != '.')
- s[i][2] = i+1;
- if (c[i-n] != '.')
- s[i][3] = i-n;
- if (c[i+n] != '.')
- s[i][4] = i+n;
- }
- j=1;
- while ((c[j] != '#')&&(j <= m*n))
- j++;
- if (j <= m*n)
- {
- deep(j);
- k++;
- for (i = j+1; i <= n*m; i ++)
- if ((used[i] == false) && (c[i] == '#'))
- {
- deep(i);
- k++;
- }
- }
- cout<<k<<endl;
- }
- void deep (int x)
- {
- int i;
- used[x] = true;
- for (i = 1; i <= n*m; i ++)
- if ((i != x) && (used[i] == false) && ((s[x][1] == i) || (s[x][2] == i) || (s[x][3] == i) || (s[x][4] == i)))
- deep(i);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement