记录每一行,每一列有多少个 o,然后统计答案即可。
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n;
string str[2005];
int r[2005][2005],l[2005][2005];
signed main()
{
cin >> n;
for(int i = 1;i <= n;i++)
{
cin >> str[i];
str[i] = " " + str[i];
}
for(int i = 1;i <= n;i++)
{
for(int j = 1;j <= n;j++)
{
r[i][j] = r[i - 1][j] + (str[i][j] == 'o');
l[i][j] = l[i][j - 1] + (str[i][j] == 'o');
}
}
int ans = 0;
for(int i = 1;i <= n;i++)
{
for(int j = 1;j <= n;j++)
{
if(str[i][j] == 'o')
{
ans += (r[n][j] - 1) * (l[i][n] - 1);
}
}
}
cout << ans;
return 0;
}