#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin>>n;
int a[201][201]={0};
int sum[201][201]={0};
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
char cnt;
cin>>cnt;
a[i][j]=cnt-'0';
}
}
// for(int i=1;i<=n;i++){
// for(int j=1;j<=n;j++){
// cout<<a[i][j]<<" ";
// }
// cout<<endl;
//
// }
vector<int>ans(n+1,0);
// char a;
// cin>>a;
// int k=a-'0';
// cout<<k;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+a[i][j];
}
}
// for(int i=1;i<=n;i++){
// for(int j=1;j<=n;j++){
// cout<<sum[i][j]<<" ";
// }
// cout<<endl;
//
// }
//cout<<"========="<<endl;
for(int i=2;i<=n;i++){
int k=0;
//int num=0;
// vector<int>num;
for(int j=1;j<=n-i+1;j++){
for(int z=1;z<=n-i+1;z++){
int x1=j;int y1=z;//1,1
int x2=j+i-1;//2
int y2=z+i-1;//2
int cnt=sum[x2][y2]-sum[x2][y1-1]-sum[x1-1][y2]+sum[x1-1][y1-1];
// num.push_back(cnt);
if((i*i-cnt)==cnt){
k++;
}
// num++;
}
}
// for(int i=0;i<9;i++)cout<<num[i]<<" ";
//cout<<num;
// break;
ans[i]=k;
}
for(int i=1;i<=n;i++){
cout<<ans[i]<<endl;
}
}
// 64 位输出请用 printf("%lld")
二维前缀和
最新推荐文章于 2024-09-13 16:27:15 发布