Submission #1301787

#TimeUsernameProblemLanguageResultExecution timeMemory
1301787kustov_vadim_533Bitaro the Brave (JOI19_ho_t1)C++20
100 / 100
124 ms80048 KiB
#include <iostream>
#include <vector>
#include <algorithm>
#include <set>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <string>
#include <math.h>
#include <cmath>
#include <stack>
#include <bitset>
#include <array>
#include <random>
#include <queue>

using namespace std;
typedef long long ll;

typedef long double ld;

void solve() {
    int n, m;
    cin >> n >> m;

    vector<vector<char>> a(n, vector<char>(m));
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < m; ++j) {
            cin >> a[i][j];
        }
    }

    vector<vector<int>> cnti(n, vector<int>(m));
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < m; ++j) {
            cnti[i][j] = a[i][j] == 'I';
        }
    }
    for (int i = n - 2; i >= 0; --i) {
        for (int j = 0; j < m; ++j) {
            cnti[i][j] += cnti[i + 1][j];
        }
    }

    vector<vector<int>> cnto(n, vector<int>(m));
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < m; ++j) {
            cnto[i][j] = a[i][j] == 'O';
        }
    }
    for (int i = 0; i < n; ++i) {
        for (int j = m - 2; j >= 0; --j) {
            cnto[i][j] += cnto[i][j + 1];
        }
    }

    ll ans = 0;
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < m; ++j) {
            ans += (a[i][j] == 'J') * cnti[i][j] * cnto[i][j];
        }
    }

    cout << ans << '\n';
}

signed main() {
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cout.precision(30);
    int t = 1;
//    cin >> t;
    while (t--) {
        solve();
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...