BZOJ 1057: [ZJOI2007]棋盘制作
基本和玉蟾宫一样
就是判断条件和一些细节不同而已。。。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 int i,j,k,n,m,a,squ,ch,x,y,z; 6 int e[2001][2001]={}; 7 int h[2001][2001]={}; 8 int l[2001][2001]={}; 9 int r[2001][2001]={}; 10 int li[2001][2001]={}; 11 int ri[2001][2001]={}; 12 int main() 13 { 14 scanf("%d%d",&n,&m); 15 for(i=1;i<=n;i++) 16 { 17 for(j=1;j<=m;j++) 18 { 19 scanf("%d",&a); 20 e[i][j]=a+1; 21 } 22 } 23 for(i=1;i<=n;i++) 24 { 25 k=0; 26 for(j=1;j<=m;j++) 27 { 28 if(e[i][j]==e[i][j-1]) 29 { 30 li[i][j]=j-1; 31 k=j-1; 32 } 33 else 34 { 35 li[i][j]=k; 36 } 37 } 38 k=m+1; 39 for(j=m;j>=1;j--) 40 { 41 if(e[i][j]==e[i][j+1]) 42 { 43 ri[i][j]=j+1; 44 k=j+1; 45 } 46 else 47 { 48 ri[i][j]=k; 49 } 50 } 51 } 52 for(j=1;j<=m;j++) 53 { 54 l[0][j]=0; 55 r[0][j]=m+1; 56 } 57 squ=0; 58 ch=0; 59 for(j=1;j<=m;j++) 60 { 61 for(i=1;i<=n;i++) 62 { 63 if(e[i][j]==e[i-1][j]) 64 { 65 h[i][j]=1; 66 l[i][j]=li[i][j]+1; 67 r[i][j]=ri[i][j]-1; 68 } 69 else 70 { 71 h[i][j]=h[i-1][j]+1; 72 l[i][j]=max(li[i][j]+1,l[i-1][j]); 73 r[i][j]=min(ri[i][j]-1,r[i-1][j]); 74 } 75 x=h[i][j]; 76 y=r[i][j]-l[i][j]+1; 77 z=min(x,y); 78 squ=max(squ,z*z); 79 ch=max(ch,x*y); 80 } 81 } 82 printf("%d\n",squ); 83 printf("%d",ch); 84 return 0; 85 }
不知道为毛在wikioi上超时,还是我太弱了。。。