#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<math.h>
#include<map>
#include<queue>
using namespace std; const int maxn=+;
char s[maxn][maxn];
int n,m;
int c[maxn][maxn];
int sum[*maxn][*maxn];
int ans[maxn]; int main()
{
int T;
//freopen("F:\\in.txt","r",stdin);
scanf("%d",&T);
while(T--){
scanf("%d%d",&n,&m);
memset(sum,,sizeof sum);
memset(ans,,sizeof ans);
// memset(c,0,sizeof c);
for(int i=;i<n;i++) scanf("%s",s[i]);
for(int i=;i<=n;i++) for(int j=;j<=n;j++) c[i][j]=s[i-][j-]-''; for(int i=;i<=*n;i++)
for(int j=;j<=*n;j++)
{
if(i>n||j>n)sum[i][j]=sum[i-][j]+sum[i][j-]-sum[i-][j-];
else sum[i][j]=sum[i-][j]+sum[i][j-]-sum[i-][j-]+c[i][j];
} for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
{
if(c[i][j]==) continue;
int left,right,mid;
int anslen;
left=;right=n;
while(left<=right)
{
mid=(left+right)/;
int s=sum[i+mid-][j+mid-]-sum[i+mid-][j-]-sum[i-][j+mid-]+sum[i-][j-];
if(s==mid*mid)
{
anslen=mid;
left=mid+;
}
else right=mid-;
}
ans[anslen]++;
}
} for(int i=n-;i>=;i--) ans[i]=ans[i]+ans[i+];
//for(int i=1;i<=n;i++) printf("%d %d\n",i,ans[i]); for(int i=;i<=m;i++)
{
int x;
scanf("%d",&x);
printf("%d\n",ans[x]);
} }
return ;
}

最新文章

  1. HDU1401 BFS
  2. python file operations
  3. SSH框架简化(struts2+spring+hibernate)
  4. 初始maven
  5. 动态设置屏幕icon
  6. 【转】Ubuntu安装基础教程
  7. 解放程序猿宝贵的右手(或者是左手) ——Android自动化测试技巧
  8. VS2015预览版中的C#6.0 新功能(一)
  9. 消息机4_B
  10. Git详解之六 Git工具(转)
  11. iOS UIWebView键盘操控
  12. Winform无边框窗体(FormBorderStyle属性设为None)自定义移动
  13. C和C++中的名字空间和作用域
  14. Microsoft Visual Studio 打开代码出现乱码解决方案
  15. [源码分析]StringBuilder
  16. 安卓基础之通过Intent跳转Activity
  17. RubyMine 2017.3.2破解教程
  18. ubuntu 32/64 bit
  19. Linux 文件目录管理命令
  20. Expm 1_1 实现基于分治法的归并排序算法.

热门文章

  1. python--windows下安装BeautifulSoup
  2. h3c dhcp snooping
  3. Json与Gson讲解
  4. Swift 与 JSON 数据
  5. ntp-keygen.c
  6. Android中ViewPager如何设置不能通过屏幕左右滑动来切换页面
  7. 关于:hover的一点小问题
  8. 快速部署Python应用:Nginx+uWSGI配置详解
  9. Centos6.5安装与配置Tomcat-8的方法
  10. opentsdb