// #pragma GCC optimize("O3,unroll-loops")
// #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <utility>
#include <cmath>
#include <ctime>
#include <cassert>
#include <set>
#include <stack>
#include <map>
#include <queue>
#include <random>
#include <chrono>
#include <bitset>
#include <array>
using ll = long long;
#define debug(x) cout << #x << " = " << x << '\n'
#define separator "===============================================\n"
#define all(a) a.begin(), a.end()
#define SZ(a) (int)(a).size()
using namespace std;
const int mxn = 1e5 + 3;
const ll mod = 1e9 + 7;
const int inf32 = 2e9;
const ll inf64 = 3e18;
void solve(){
int n, m;
cin >> n >> m;
vector<vector<int>> cntI(n + 1, vector<int>(m + 1)),
cntO(n + 1, vector<int>(m + 1));
vector<vector<char>> a(n + 1, vector<char>(m + 1));
for (int i = 1; i <= n; ++i){
for (int j = 1; j <= m; ++j){
cin >> a[i][j];
if (a[i][j] == 'I') ++cntI[i][j];
if (a[i][j] == 'O') ++cntO[i][j];
cntI[i][j] += cntI[i - 1][j];
cntO[i][j] += cntO[i][j - 1];
}
}
long long res = 0;
for (int i = 1; i < n; ++i){
for (int j = 1; j < m; ++j) if (a[i][j] == 'J'){
res += 1ll * (cntO[i][m] - cntO[i][j]) * (cntI[n][j] - cntI[i][j]);
}
}
cout << res;
}
int main(){
auto start = chrono::steady_clock::now();
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int t = 1;
// cin >> t;
while(t--) solve();
chrono::duration<double> elapsed {chrono::steady_clock::now() - start};
cerr << "\n>> Runtime: " << elapsed.count() << "s\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... |