#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 time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |