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的話,即可更新一下最大的行數了。
看了解題報告才做出來,實在是太水了.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;
}
}
#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 閱讀(843) 評論(0) 編輯 收藏 引用 所屬分類: Algorithm 、TopCoder