いろいろがんばりたいブログ

情報科学科の人がいろいろ書きます。

Topcoder SRM 564 div2

なんか参加してないけどプラクティスしてみたらめっちゃ簡単だった。
includeとかは省いてみる。

250 FauxPalindromes
http://community.topcoder.com/stat?c=problem_statement&pm=12325&rd=15186
やるだけ。reverse(s.begin(),s.end())と、s.erase(unique(s.begin(),s.end()),s.end())を知っていればそれだけで終わる。

class FauxPalindromes {
    public:
        string classifyIt(string word) {
            string rev = word;
            reverse(rev.begin(),rev.end());
            if(word == rev) return "PALINDROME";

            word.erase(unique(word.begin(),word.end()),word.end());
            rev.erase(unique(rev.begin(),rev.end()),rev.end());
            cerr << word << endl;
            if(word == rev) return "FAUX";
            return "NOT EVEN FAUX";

        }
}

500 AlternateColors

class AlternateColors {
    public:
        string getColor(long long r, long long g, long long b, long long k) {
            long long mi = min(r,min(g,b));
            if(3*mi >= k){
                switch(k%3){
                case 1:
                    return "RED";
                case 2:
                    return "GREEN";
                case 0:
                    return "BLUE";
                }
            }
            k -= 3*mi;
            r -= mi;
            g -= mi;
            b -= mi;
            long long x,y;
            string sx,sy;
            if(r == 0){
                x = g;y = b;
                sx = "GREEN";sy="BLUE";
            }
            if(g == 0){
                x = r;y = b;
                sx = "RED";sy="BLUE";

            }
            if(b == 0){
                x = r;y = g;
                sx = "RED";sy="GREEN";
            }

            mi = min(x,y);
            if(mi == 0){
                if(x == 0) return sy;
                else return sx;
            }
            if(2*mi >= k){
                switch(k%2){
                case 1:
                    return sx;
                case 0:
                    return sy;
                }
            }else{
                if(x==mi) return sy;
                else return sx;
            }
            return "NAN";
        }
}

場合分けするだけ。

Aは231点。Bは378点。もうちょいBは早く解けたな。
出たら緑になれたんだろうし、出たかった(´・ω・`),,,,