水题一道,却切得很吃力。
题意:n*m的图上有许多小格,小格上是数字0或者1,问每对一个小格上的数字进行反转一次,在所有行中最大的连续的1的个数。
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; struct A { int maxx,sum; }a[505]; int main() { int n,m,q; int s[505][505],maxn,x,y; while(scanf("%d%d%d",&n,&m,&q)!=EOF) { maxn=-1; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) scanf("%d",&s[i][j]); for(int i=1;i<=n;i++) { a[i].maxx=-1; a[i].sum=0; } for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(s[i][j]==1) { a[i].sum++; } else { a[i].maxx=max(a[i].maxx,a[i].sum); a[i].sum=0; } a[i].maxx=max(a[i].maxx,a[i].sum); } maxn=max(maxn,a[i].maxx); } while(q--) { scanf("%d%d",&x,&y); if(s[x][y]==1) { s[x][y]=0; } else { s[x][y]=1; } a[x].sum=0; a[x].maxx=-1; //!!! for(int j=1;j<=m;j++) { if(s[x][j]==1) { a[x].sum++; } else { a[x].sum=0; a[x].maxx=max(a[x].maxx,a[x].sum); } a[x].maxx=max(a[x].maxx,a[x].sum); } int ans=-1; for(int i = 1; i<=n; i++) //!!! ans=max(ans,a[i].maxx); printf("%d\n",ans); } } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-12 22:07:57