#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
    ios::sync_with_stdio(false);
	cin.tie(NULL);
    ll n,m;
    cin>>n>>m;
    vector<vector<ll>> a(n,vector<ll>(m));
    for(int i=0;i<n;i++)
    {
    	string s;
    	cin>>s;
    	for(int j=0;j<m;j++)
    	{
    		if(s[j]=='J')
    		{
    			a[i][j]=0;
			}
			else if(s[j]=='O')
			{
				a[i][j]=1;
			}
			else
			{
				a[i][j]=2;
			}
		}
	}
	vector<vector<ll>> r(n),c(m);
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		{
			if(a[i][j]==1)
			{
				r[i].push_back(j);
			}
		}
	}
	for(int i=0;i<m;i++)
	{
		for(int j=0;j<n;j++)
		{
			if(a[j][i]==2)
			{
				c[i].push_back(j);
			}
		}
	}
    ll ans=0;
    for(int i=0;i<n;i++)
    {
    	for(int j=0;j<m;j++)
    	{
    		if(a[i][j]==0)
    		{
    			ll it1=upper_bound(r[i].begin(),r[i].end(),j)-r[i].begin();
    			ll it2=upper_bound(c[j].begin(),c[j].end(),i)-c[j].begin();
    			ans=ans+((ll)r[i].size()-it1)*((ll)c[j].size()-it2);
			}
		}
	}
	cout<<ans;
	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... |