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 }
View Code

不知道为毛在wikioi上超时,还是我太弱了。。。

posted @ 2014-03-16 16:48  wyc  阅读(...)  评论(... 编辑 收藏