제출 #970471

#제출 시각아이디문제언어결과실행 시간메모리
970471jadai007Bob (COCI14_bob)C++14
120 / 120
532 ms21992 KiB
#include<bits/stdc++.h>
#define ll long long

using namespace std;

int n,m, arr[1001][1001];
ll dp1[1001][1001], dp2[1001][1001], ans;

int main(){
    cin.tie(nullptr)->sync_with_stdio(false);
    cin >> n >> m;
    for(int i = 1; i<=n; ++i) for(int j = 1; j<=m; ++j) cin >> arr[i][j];
    for(int i = 1; i<=n; ++i){
        for(int j = 1; j<=m; ++j){
            if(arr[i][j] == arr[i][j - 1]) dp1[i][j] = dp1[i][j - 1] + 1;
            else dp1[i][j] = 1;
        }
    }
    for(int j = 1; j<=m; ++j){
        for(int i = 1; i<=n; ++i){
            if(arr[i][j] == arr[i - 1][j]) dp2[i][j] = dp2[i - 1][j] + 1;
            else dp2[i][j] = 1;
        }
    }
    for(int i = 1; i<=n; ++i){
        for(int j = 1; j<=m; ++j){
            ll M = dp1[i][j], N = dp2[i][j];
            int k = j - 1;
            ans+=N;
            while(k > j - M){
                N = min(N, dp2[i][k]);
                ans+=N;
                k--;
            }
        }
    }
    cout << ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...