Posted on 2011-12-13 22:06
acpeng 阅读(415)
评论(0) 编辑 收藏 引用 所属分类:
ACM程序
又刷一道水题,地址:
http://acm.fzu.edu.cn/problem.php?pid=2064内容不复述,直接code
#include<stdio.h>
int data[103][103];
int flg_1,flg_2;
//搜索data[i][j] ~ data[i][j+w-1],若符合,返回1;否则返回0,flg_1为最后一个1的位置
int search(int a[],int j,int w)
{
int i;
for(i=j+w-1;i>=j;i--)
{
if(a[i]!=0)
{
flg_1=i;
return 0;
}
}
return 1;
}
//找出data数据第 i 行data[i][j]之后的第一个1的位置,返回之间的0的个数
int find1behind(int a[],int j,int m)
{
int i,cont=0;
for(i=0;j+i<=m;j++)
{
if(a[j+i]==0)cont++;
else break;
}
flg_2=j+i;
return cont;
}
int main()
{
int T,N,M,W,i,j,tmp,cont;
scanf("%d",&T);
while(T--)
{
scanf("%d%d%d",&N,&M,&W);
for(i=0;i<N;i++)
for(j=0;j<M;j++)
scanf("%d",&data[i][j]);
cont=0;
for(i=0;i<N;i++)
{
for(j=0;j<=M-W;j++)
{
tmp=search(data[i],j,W);
if(tmp==0)
{
j=flg_1;
}
else
{
cont++;
cont+=find1behind(data[i],j+W,M-1);
j=flg_2;
}
}
}
printf("%d\n",cont);
}
return 0;
}