专栏文章
题解:P14209 [ROI 2016 Day2] 视频监控管理
P14209题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @minh7mta
- 此快照首次捕获于
- 2025/12/02 02:22 3 个月前
- 此快照最后确认于
- 2025/12/02 02:22 3 个月前
思路
既然是行和列的循环,我们套路化的把数组复制一下,即这个矩形的长和宽乘以 。
然后我们处理二维前缀和,在这个大矩形中找 的矩形即可。
代码如下。
code
CPP#include <bits/stdc++.h>
using namespace std;
const int N=2e3+10;
int n,m,a[N][N],b[N][N],sum[N][N];
int main()
{
freopen("room.in","r",stdin);
freopen("room.out","w",stdout);
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
char c;cin>>c;
a[i][j]=a[i+n][j]=a[i][j+m]=a[i+n][j+m]=c-'0';
}
}
for(int i=2;i<=2*n;i++)
{
for(int j=2;j<=2*m;j++)
{
if(a[i][j]==a[i-1][j]&&a[i][j]==a[i][j-1]&&a[i][j]==a[i-1][j-1]) b[i][j]=1;
else b[i][j] = 0;
}
}
for(int i=1;i<=2*n;i++)
{
for(int j=1;j<=2*m;j++)
{
sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+b[i][j];
}
}
int ans=0;
for(int i=n+1;i<=2*n;i++)
{
for(int j=m+1;j<=2*m;j++)
{
int now=sum[i][j]-sum[i-n+1][j]-sum[i][j-m+1]+sum[i-n+1][j-m+1];
ans=max(ans,now);
}
}
cout<<ans;
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...