SubrectanglesOfTable (SRM 429 Div2 500)


这题看了别人讨论才做出来。

暴力法:枚举所有的矩形,然后统计各个矩形中的字符数。这样时间复杂度O(n^12)必然超时。

可以反过来考虑问题,对于矩形中的每一个单元,会有多少个矩形包含它。

这样思考,问题就很简单了:
一个矩形可以由它的左上角和右下角唯一决定。
而若某单元(x,y)包括在某矩形中,那么,这个矩形的左上角(x',y')必然为(0<=x'<=x),(0<=y'<=y).
右上角(x'',y'')必然为(x<=x''<c),(y<=y''<r).c为总列数,r为总行数。
这样的矩形显然有(x+1)(y+1)(c-x)(c-y)个。(坐标均为0-based)

代码如下:
   class SubrectanglesOfTable
              { 
              
public
              vector
<long long> getQuantity(vector <string> t) 
                  { 
                          vector
<long long> res(26);   
                          
                          
for(int i=0;i<t.size();++i)
                               t[i]
+=t[i];
                          
                          
int tmp = t.size();
                          
for(int i=0;i<tmp;++i)
                            t.push_back(t[i]);                               
                            
                          
int r = t.size();
                          
int c = t[0].size();
                          
                          
for(int i=0;i<r;++i)
                            
for(int j=0;j<c;++j){
                                  res[ t[i][j]
-'A']+=(i+1)*(j+1)*(r-i)*(c-j);               
                                  }   
                             
                         
return res;                                                                
                  }
       }

其实不需要生成字符串的四个拷贝。

posted on 2009-06-21 11:26 YZY 阅读(985) 评论(0)  编辑 收藏 引用 所属分类: AlgorithmTopCoder


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

<2009年6月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

统计

常用链接

留言簿(2)

随笔分类

随笔档案

搜索

积分与排名

最新评论

阅读排行榜