SRM507 Div1 easy CubeStickers
問題概要
サイコロにステッカーをはる。
ステッカーの色がstringのvectorで与えられる。
隣り合う面が同じ色であってはいけない。
与えられた色のリストでそのような張り方が実現できるか答えよ。
解法
どうがんばっても、同じ色のステッカーは2枚張れない。
2枚以上同じ色があっても意味がない。
ある場所にステッカーを張ると、もう1枚張る同じ色のステッカーの場所は
一意であり、かつ、その場所は他の場所に張られたステッカーのもう一枚の場所にもならないので、
他の色のステッカーが2枚張ってあるからといって、別のステッカーが2枚張れなくなることはない。
よって、2枚以上同じ色のステッカーがあった場合は無視して、
その数が6枚を超えれば張ることが可能である。
ソース
#include<string> #include<vector> #include<map> #define FOR(it,o) for(__typeof((o).begin()) it=(o).begin(); it!=(o).end(); ++it) using namespace std; class CubeStickers { public: string isPossible(vector <string> sticker) { map<string, int> M; FOR(it, sticker){ M[*it]++; } int cnt = 0; FOR(it, M){ if(it->second >= 2)cnt+=2; else cnt++; } if(cnt >= 6)return "YES"; else return "NO"; } };