今日は簡単な問題を解いてみた。250点問題は問題文が読めなくてもI/Oだけでなんとなく問題の意味が分かるから助かる。
#include <iostream> #include <algorithm> using namespace std; class CCipher { public: string decode(string cipherText, int shift) { char alpha[26] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'}; string ans = ""; reverse(alpha+26-shift, alpha+26); reverse(alpha, alpha+26-shift); reverse(alpha, alpha+26); for(int i = 0; i < cipherText.size(); i++) { ans += alpha[(int)(cipherText[i]-'A')]; } return ans; } };
reverse関数に直接stringは使えなかったり、reverse関数の仕様を勘違いしたりと色々なところで時間をロスしてサブミットした時には163点という結果だった。
ところが、テストを1回だけしたそのコードが間違っていることに後から気づいた。
どうやらICPCとは違い、TopCoderのサブミットはコンパイルして実行するようなことはなく、ただ時間に応じてスコアを表示しているだけらしい。本番のシステムテストのフェーズでだけ答え合わせを行うようだ。今日始めて知った。
そして、新たにアルゴリズム系の勉強としてProject Eulerというものに登録してみた。どうやら先輩もやっているらしい。これはPerlの勉強をかねてやるつもり。