题解:AT_abc461_d [ABC461D] Count Subgrid Sum = K
题意:求有多少子矩阵的和为
暴力显然是
#include<bits/stdc++.h>
using namespace std;
int h,w,k,pre[505][505];
long long ans;
char mp[505][505];
int main(){
cin>>h>>w>>k;
for(int i=1;i<=h;i++)for(int j=1;j<=w;j++) cin>>mp[i][j];
for(int i=1;i<=w;i++)for(int j=1;j<=h;j++) pre[i][j]=pre[i][j-1]+mp[j][i]-'0';
for(int i=1;i<=h;i++)for(int j=i;j<=h;j++){
unordered_map<int,int> cnt;
cnt[0]=1;int p=0;
for(int c=1;c<=w;c++){
int val=pre[c][j]-pre[c][i-1];
p+=val;int target=p-k;
auto it=cnt.find(target);
if(it!=cnt.end()) ans+=it->second;
++cnt[p];
}
}
return cout<<ans,0;
}