問題
http://community.topcoder.com/stat?c=problem_statement&pm=11315&rd=14436
6面体を与えられた色を使って塗りたい。
ただし、隣り合う面は違う色で塗らなくてはいけない。
使える色の集合が与えられたとき、6面体を塗ることができれば”Yes”、塗れなければ
”No”を返す。
解き方
各色について、2色までであれば反対側の面で使うことができる。
よって各色についてその色の数もしくは2のうちの最小のものを足していき
最後にその数の和が6以上であれば6面体を塗ることができる。
コード
class CubeStickers {
public: string isPossible(vector<string> sticker) {
int n=sticker.size();
map<string,int> m;
FORE(i,0,n)m[sticker[i]]++;
int sum=0;
for(map<string,int>::iterator it=m.begin();it!=m.end();it++){
sum+=min(2,it->second);
}
return sum>=6 ? "YES" : "NO";
}
};
public: string isPossible(vector<string> sticker) {
int n=sticker.size();
map<string,int> m;
FORE(i,0,n)m[sticker[i]]++;
int sum=0;
for(map<string,int>::iterator it=m.begin();it!=m.end();it++){
sum+=min(2,it->second);
}
return sum>=6 ? "YES" : "NO";
}
};