Submission #170739

#TimeUsernameProblemLanguageResultExecution timeMemory
170739BigChungusStrah (COCI18_strah)C++14
55 / 110
121 ms109616 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 ordered_set tree<int, null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update>

const int N = 306;

string s[N];

int dp[N][N][N];

int main()
{
    ios_base::sync_with_stdio(NULL);
    cin.tie(0);
    cout.tie(0);
    int n, m;
    cin >> n >> m;
    for (int i = 1; i <= n; ++i) {
        cin >> s[i];
        s[i] = '$' + s[i];
    }
    long long ans(0);
    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= m; ++j) {
            if (s[i][j] != '#')
                dp[i][j][1] = dp[i - 1][j][1] + 1, ans += 1LL * dp[i][j][1] * (dp[i][j][1] + 1) / 2;
            for (int k = 2; k <= j; ++k)
                if (s[i][j] != '#')
                    dp[i][j][k] = min(dp[i][j - 1][k - 1], dp[i][j][1]), ans += 1LL * dp[i][j][k] * (dp[i][j][k] + 1) / 2 * k;
        }
    }
    cout << ans;
    return 0;
}
#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...