LampGrid (SRM 432 Div2 500)

题目链接:http://www.topcoder.com/stat?c=problem_statement&pm=10154&rd=13694

看了解题报告才做出来,实在是太水了.T.T

关键的思路在于无论怎么开关,相同的行永远是相同的。
此外就是在某一开关上开关偶数次等于0次,开关的顺序是无关的。

对于某一行,把它变成全1所需要的操作次数为它的0的个数。
而这些操作最终导致全1的行数等于最初与这一行相同的行的行数。

用map存储一下每一行相同的行数,再看k次开关能否使其变成全1。
能使其变成全1的话,即可更新一下最大的行数了。


#include <vector>
#include 
<algorithm>
#include 
<sstream>
#include 
<string>
#include 
<iostream>
#include 
<map>

using namespace std;

         
class LampsGrid
              { 
              
public
                  
              
int mostLit(vector <string> initial, int K) 
                  { 
                      map
<string,int> cnt;

                      
for(int i=0;i<initial.size();++i){
                          cnt[initial[i]]
++;
                      }

                      
int res = 0;

                      
for(map<string,int>::iterator i = cnt.begin();
                              i
!=cnt.end();
                              
++i){

                          
int num_0 = count(i->first.begin(),i->first.end(),'0');

                          
if( (K>=num_0) && (K-num_0)%2==0 ){
                              res 
= max(res,cnt[i->first]);
                          }
                      }

                      
return res;
                  }
}


posted on 2009-06-08 22:51 YZY 阅读(829) 评论(0)  编辑 收藏 引用 所属分类: AlgorithmTopCoder


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


导航

<2024年4月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

统计

常用链接

留言簿(2)

随笔分类

随笔档案

搜索

积分与排名

最新评论

阅读排行榜