Time Limit:1000ms
Memory Limit:65535K
Description
给定一个仅包含 0和1,大小为N*M的矩阵。
小蓝想找到其中最长线段的长度。
Input
输入第一行包含两个整数 N 和M ,
表示矩阵的行和列数目。
接下来包含 N行,第i 行包含M 个整数,
表示矩阵的第 i行。
Output
输出一行,包含一个整数,表示矩阵中最长线段的长度。
Sample Input
3 3
0 1 1
1 1 0
0 1 0
Sample Output
3
Hint
1<=N,M<=1000,数字仅包含0和1
Solution
分别按行按列扫描矩阵,查找最长连续数字即可。
Code
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,m,a[1000][1000],cnt0=0,cnt1=0,ans=0;
int main()
{
cin>>n>>m;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cin>>a[i][j];
if(a[i][j])
{
cnt1++;
ans=max(ans,cnt0);
cnt0=0;
}
else
{
cnt0++;
ans=max(ans,cnt1);
cnt1=0;
}
}
ans=max(ans,cnt0);
ans=max(ans,cnt1);
cnt0=cnt1=0;
}
cnt0=cnt1=0;
for(int j=0;j<m;j++)
{
for(int i=0;i<n;i++)
{
if(a[i][j])
{
cnt1++;
ans=max(ans,cnt0);
cnt0=0;
}
else
{
cnt0++;
ans=max(ans,cnt1);
cnt1=0;
}
}
ans=max(ans,cnt0);
ans=max(ans,cnt1);
cnt0=cnt1=0;
}
cout<<ans;
return 0;
}