#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
typedef long long ll;
using namespace std;
int main() {
cin.tie(0) -> sync_with_stdio(0);
ll h, w;
cin >> h >> w;
vector<vector<char>> grid(h + 1, vector<char>(w + 1, ' '));
vector<vector<ll>> I(h + 1, vector<ll>(w + 1, 0));
vector<vector<ll>> O(h + 1, vector<ll>(w + 1, 0));
for (ll i = 1; i<=h; ++i) {
string l; cin >> l;
for (ll j = 1; j<=w; ++j) grid[i][j] = l[j - 1];
}
for (ll i = 1; i<=h; ++i) for (ll j = 1; j<=w; ++j) O[i][j] += O[i][j - 1] + (grid[i][j] == 'O');
for (ll j = 1; j<=w; ++j) for (ll i = 1; i<=h; ++i) I[i][j] += I[i - 1][j] + (grid[i][j] == 'I');
// for (auto &v: O) {
// for (ll &i: v) cout << i << ' ';
// cout << '\n';
// }
// cout << '\n';
// for (auto &v: I) {
// for (ll &i: v) cout << i << ' ';
// cout << '\n';
// }
ll res = 0;
for (ll i = 1; i<=h; ++i) {
for (ll j = 1; j<=w; ++j) {
if (grid[i][j] == 'J') {
// cout << i << ' ' << j << ": ";
ll oc = O[i][w] - O[i][j];
ll ic = I[h][j] - O[i][j];
// cout << oc << " x " << ic << '\n';
res += (oc * ic);
}
}
}
cout << res << '\n';
}
/*
*/
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |