mayoko’s diary

プロコンとかいろいろ。

SRM 489 div1 easy:BallsConverter

SRM 489の練習会に参加。結果はeasyだけ解いて(110ptくらい)うーんと言った感じです。なんか変わった問題(良い問題だとは思う)で慣れてないなぁと思いました。

問題:TopCoder Statistics - Problem Statement

解法:問題文の通り解釈してはいけない。実際にはどう解釈すべきかというと,ある演算$が定義されていて,A$B = Cといったような式が成り立っていて,これは演算の順番によらず同じ値になるか,という問題と解釈すべきである。それがわかれば後は簡単。
以下ソースコード

class BallsConverter {
public:
    string theGood(vector <string> convert) {
        int N = convert.size();
        vector<vector<int> > mat(N, vector<int>(N));
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < N; j++) {
                if ('A' <= convert[i][j] && convert[i][j] <= 'Z') {
                    mat[i][j] = convert[i][j] - 'A';
                } else {
                    mat[i][j] = convert[i][j] - 'a'+26;
                }
            }
        }
        bool ok = true;
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < N; j++) {
                for (int k = 0; k < N; k++) {
                    if (mat[mat[i][j]][k] != mat[i][mat[j][k]]) {
                        ok = false;
                    }
                }
            }
        }
        if (ok) return "Good";
        else return "Bad";
    }
};