mayoko’s diary

プロコンとかいろいろ。

SRM 507 div1 easy:CubeStickers

SRM 507の練習会に参加。結果はeasyとmedを通してそこそこでした。ただmedは再提出して150ptだったし計算量的にやや危なかったので反省ですね。

解法

問題の制約で色は6個以上あるので色が5種類以上あれば絶対OK。
3種類の場合は色の分布が2-2-2になっていればOK。それ以外は1つの色が3つ以上あるものが存在するのでNG。
4種類の場合は2種類以上の色が2つ以上の色を持てばOK。それ以外では1つの色が3つ以上あるものが存在するのでNG。

もっとスマートな解法もあるけど本番思いついたのはこれでした。

class CubeStickers {
public:
    string isPossible(vector <string> sticker) {
        map<string, int> M;
        int n = sticker.size();
        for (string s : sticker) {
            M[s]++;
        }
        if (M.size() >= 5) {
            return "YES";
        }
        if (M.size() < 3) return "NO";
        vector<int> v;
        for (auto p : M) {
            v.push_back(p.second);
        }
        sort(v.begin(), v.end());
        if (M.size() == 3) {
            if (v[0] >= 2 && v[1] >= 2 && v[2] >= 2) return "YES";
            else return "NO";
        }
        if (M.size() == 4) {
            if (v[2] >= 2) return "YES";
            return "NO";
        }
        return "YES";
    }
};