Submission #235763

#TimeUsernameProblemLanguageResultExecution timeMemory
235763KalamRaspad (COI17_raspad)C++11
100 / 100
407 ms197880 KiB
// KALAM
# include<bits/stdc++.h>

using namespace std;

const int N = 100000 + 77 , NN = 0 + 77;
int n , m , Mnx , Mxx;
char S[N][NN];
bool M[N][NN];
long long A;
bool bad;
void dfs(int x , int y) {
   Mxx = max(Mxx , x);
   Mnx = min(Mnx , x);
   if(y == 1 || y == m)
      bad = 1;
   M[x][y] = 1;
   for(int i = -1;i <= 1;++ i)
      for(int j = -1;j <= 1;++ j) {
         int nx = x + i , ny = y + j;
         if(! M[nx][ny] && nx >= 1 && nx <= n && ny >= 1 && ny <= m && S[nx][ny] == '0')
            dfs(nx , ny);
      }
}
int main() {
   scanf("%d %d" , & n , & m);
   for(int i = 1;i <= n;++ i)
      scanf("%s" , S[i] + 1);
   for(int i = 1;i <= n;++ i)
      for(int j = 1;j <= m;++ j)
         A += 1ll * (S[i][j] - '0') * i * (n - i + 1);
   for(int i = 1;i <= n;++ i)
      for(int j = 1;j < m;++ j)
         if(S[i][j] == S[i][j + 1] && S[i][j] == '1')
            A -= 1ll * i * (n - i + 1);
   for(int i = 1;i < n;++ i)
      for(int j = 1;j <= m;++ j)
         if(S[i][j] == S[i + 1][j] && S[i][j] == '1')
            A -= 1ll * i * (n - i);

   for(int i = 1;i <= n;++ i)
      for(int j = 1;j <= m;++ j)
         if(! M[i][j] && S[i][j] == '0') {
            Mnx = Mxx = i;
            bad = 0;
            dfs(i , j);
            if(! bad)
               A += 1ll * (Mnx - 1) * (n - Mxx);
         }
   for(int i = 1;i < n;++ i)
      for(int j = 1;j < m;++ j)
         if(S[i][j] == S[i + 1][j] && S[i][j + 1] == S[i][j] && S[i + 1][j + 1] == S[i][j] && S[i][j] == '1')
            A += 1ll * i * (n - i);

   printf("%lld\n" , A);
   return 0;
}

Compilation message (stderr)

raspad.cpp: In function 'int main()':
raspad.cpp:26:9: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
    scanf("%d %d" , & n , & m);
    ~~~~~^~~~~~~~~~~~~~~~~~~~~
raspad.cpp:28:12: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
       scanf("%s" , S[i] + 1);
       ~~~~~^~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...