Problem 0111 : Doctor's Memorable Codes

Doctor's Memorable Codes
http://rose.u-aizu.ac.jp/onlinejudge/ProblemSet/description.jsp?id=0111

  • 問題概要

テーブルに応じて文字を変換する。
くっそめんどくせー。

  • 解法

書くだけ。
ただし、空白も記号に置き換えたりするのでgetlineする必要あり。
空行もくるのに注意。
そのせいでwrong answerだしまくった

  • ソース
#include<iostream>
#include<string>
#include<map>

using namespace std;

main(){

  map<char, string> e;
  
  e['A'] = "00000"; 
  e['B'] = "00001";
  e['C'] = "00010";
  e['D'] = "00011";
  e['E'] = "00100";
  e['F'] = "00101";
  e['G'] = "00110"; 
  e['H'] = "00111"; 
  e['I'] = "01000";
  e['J'] = "01001";
  e['K'] = "01010";
  e['L'] = "01011";
  e['M'] = "01100";
  e['N'] = "01101";
  e['O'] = "01110"; 
  e['P'] = "01111";
  e['Q'] = "10000";
  e['R'] = "10001";
  e['S'] = "10010";
  e['T'] = "10011";
  e['U'] = "10100"; 
  e['V'] = "10101";
  e['W'] = "10110";
  e['X'] = "10111";
  e['Y'] = "11000";
  e['Z'] = "11001";
  e[' '] = "11010"; 
  e['.'] = "11011";
  e[','] = "11100";
  e['-'] = "11101";
  e['\'']= "11110";
  e['?'] = "11111";

  map<string, char> d;
  d["101"] = ' ';
  d["000000"] = '\'';
  d["000011"] = ','; 
  d["10010001"] = '-'; 
  d["010001"] = '.';
  d["000001"] = '?'; 
  d["100101"] = 'A'; 
  d["10011010"] = 'B'; 
  d["0101"] = 'C';
  d["0001"] = 'D'; 
  d["110"] = 'E'; 
  d["01001"] = 'F'; 
  d["10011011"] = 'G';
  d["010000"] = 'H'; 
  d["0111"] = 'I'; 
  d["10011000"] = 'J'; 
  d["0110"] = 'K';
  d["00100"] = 'L'; 
  d["10011001"] = 'M'; 
  d["10011110"] = 'N';
  d["00101"] = 'O';
  d["111"] = 'P'; 
  d["10011111"] = 'Q'; 
  d["1000"] = 'R'; 
  d["00110"] = 'S'; 
  d["00111"] = 'T'; 
  d["10011100"] = 'U';  
  d["10011101"] = 'V'; 
  d["000010"] = 'W'; 
  d["10010010"] = 'X'; 
  d["10010011"] = 'Y'; 
  d["10010000"] = 'Z'; 

  string s;
  while(getline(cin, s)){
    string t = "";
    for(int i=0; i<s.length(); i++){
      t += e[s[i]];
    }
    
    string ans = "";
    
    for(int i=0; i<t.length(); i++){
      string tmp = "";
      for(int j=i; j<t.length(); j++){
	tmp += t[j];	  
	i = j;
	if(d[tmp] != 0){
	  ans += d[tmp];
	  break;
	}
      }
    }
    cout << ans << endl;
  }
}