题目链接:
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;
}
}