typedef long long LL ;
const int maxn = 2008 ;
LL dp[maxn] , h[maxn];
int _stack[maxn] , top ;
int getidx(int i){
while(top >= 0 && h[_stack[top]] >= h[i]) top-- ;
_stack[++top] = i ;
if(top > 0) return _stack[top-1] ;
else return 0 ;
}
int main(){
int n , m ;
char str[maxn] ;
LL sum ;
while(cin>>n>>m){
sum = 0 ;
memset(h , 0 , sizeof(h)) ;
memset(dp , 0 , sizeof(dp)) ;
while(n--){
scanf("%s" , str+1) ;
top = -1 ;
for(int i = 1 ; i <= m ; i++){
if(str[i] == 'w') h[i]++ ;
else h[i] = 0 ;
int j = getidx(i) ;
dp[i] = dp[j] + h[i] * (i - j) ;
sum += dp[i] ;
}
}
cout<< sum << endl ;
}
return 0 ;
}
fzu2190
最新推荐文章于 2015-05-11 18:59:21 发布