SRM 144 DIV 1
符号化されたバイナリコードを,復号化しなさいって問題ですね.
とりあえずテストは通ったけどこれでよかったのかな(・・;
#include <iostream> #include <vector> #include <string> using namespace std; class BinaryCode { public: vector <string> decode(string message); }; vector<string> BinaryCode::decode(string message) { vector<string> decodeString; // return int *i_m0, *i_m1; // start 0, or 1 i_m0 = new int [message.size()]; i_m1 = new int [message.size()]; i_m0[0] = 0; i_m1[0] = 1; // asuume // decode for(int i = 0; i < (int)message.size()-1; i++) { if(i == 0) { i_m0[i+1] = (message[i]-'0') - i_m0[i]; i_m1[i+1] = (message[i]-'0') - i_m1[i]; } else { i_m0[i+1] = (message[i]-'0') - i_m0[i] - i_m0[i-1]; i_m1[i+1] = (message[i]-'0') - i_m1[i] - i_m1[i-1]; } } // is correct bool is_correct0 = true, is_correct1 = true; for(int i = 0; i < (int)message.size(); i++) { if(i_m0[i] != 1 && i_m0[i] != 0) is_correct0 = false; if(i_m1[i] != 1 && i_m1[i] != 0) is_correct1 = false; } // int to string string s0, s1; // decoded string if(is_correct0) { for(int i = 0; i < (int)message.size(); i++) { s0 += i_m0[i] + '0'; } } else { s0 = "NONE"; } if(is_correct1) { for(int i = 0; i < (int)message.size(); i++) { s1 += i_m1[i] + '0'; } } else { s1 = "NONE"; } decodeString.push_back(s0); decodeString.push_back(s1); return decodeString; }