LampGrid (SRM 432 Div2 500)

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;
                  }
}


你可能感兴趣的:(LampGrid (SRM 432 Div2 500))