You have taken the graduation picture of graduates. The picture could be regarded as a matrix A of n×nn \times nn×n, each element in A is 0 or 1, representing a blank background or a student, respectively.
However, teachers are too busy to take photos with students and only took a group photo themselves. The photo could be regarded as a matrix B of 1×m1 \times m1×m where each element is 2 representing a teacher.
As a master of photoshop, your job is to put photo B into photo A with the following constraints:
Please calculate the possible ways that you can put photo B into photo A.
The first line contains two integers n,m(1≤n,m≤2000)n,m(1 \le n,m \le 2000)n,m(1≤n,m≤2000) indicating the size of photos A and B. In the next $n$ lines,each line contains n{n}n characters of '0' or '1',representing the matrix A. The last line contains m{m}m characters of '2', representing matrix B.
Output one integer in a line, indicating the answer.
示例1
复制
5 3 00000 01110 01110 01110 00000 222
复制
6
示例2
复制
3 2 101 010 101 22
复制
0
示例3
复制
3 1 101 010 101 2
复制
4
思路:将一整行放入矩阵A中,只能放在连续m个为0的区域,因此只能每行每行看,用x记录下连续0的个数,当x>=m时,ans++;当不为0时,x清0;
代码如下:
#include <bits/stdc++.h>
using namespace std;
int n,m,ans;
string s;
int main(){
cin>>n>>m;
for(int i=0;i<n;i++){
cin>>s; //因为不能旋转方向,所以只能每行每行研究
int x =0;//连续0的个数
for(int i=0;i<s.size();i++){
if(s[i]=='0'){
x++;
if(x>=m) ans++;
}
else x=0; //遇到不是0了,清零
}
}
cin>>s;//这个串没啥用,只需要知道个数m即可
cout<<ans<<endl;
return 0;
}