这题说实话,很水。就是找到所有的J,在它的正右方数出O的个数s1,正下方数出I的个数s2,相乘为s1s2,然后结果加上s1S2即可。
本人代码如下:
#include<bits/stdc++.h>
using namespace std;
long long ans=0;
long long s[3005][3005];
long long t[3005][3005];
char c[3005][3005];
int main(){
ios::sync_with_stdio(false);
int n;
int m;
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>c[i][j];
for(int i=1;i<=n;i++){
for(int j=m;j>=1;j--){
s[i][j]=s[i][j+1]+(c[i][j]=='O');
}
}
for(int j=1;j<=m;j++){
for(int i=n;i>=1;i--){
t[i][j]=t[i+1][j]+(c[i][j]=='I');
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(c[i][j]=='J')
ans+=s[i][j]*t[i][j];
}
}
cout<<ans;
}