挑战最慢解法:O(n4)
就是二位前缀和板子,抱着骗分的心态A掉了这个普及+/提高
#include<iostream>
#include<string>
using namespace std;
const int N=150;
int n,cnt;
int s[N+10][N+10];
string a[N+10];
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
for(int j=0;j<n;j++){
if(a[i][j]=='W'){
s[i+1][j+1]=1;
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
s[i][j]+=s[i][j-1]+s[i-1][j]-s[i-1][j-1];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
for(int k=1;k<=i;k++){
for(int l=1;l<=j;l++){
if(s[i][j]-s[i][l-1]-s[k-1][j]+s[k-1][l-1]==(i-k+1)*(j-l+1)){
cnt++;
}
}
}
}
}
cout<<cnt<<endl;
return 0;
}
评测记录