SRM 144 DIV 1

mike_face2cam

符号化されたバイナリコードを,復号化しなさいって問題ですね.
とりあえずテストは通ったけどこれでよかったのかな(・・;

#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;
}