Problem:
博 士 : ?D-C'KOPUA  ピーター : どうしたんですか、デビッド博士? わけのわからないことを叫ぶのにはもう慣れましたが、 今日は文章にすらなっていませんよ。  博 士 : ほれ。      ピーター : なんですか? この表は......ああ、予選の問題にこんなのがありました。表を使って文字を置き換え ると文字数が減るんですよね。まさか予選と本選で同じ問題を出して手を抜こうって気じゃないでし ょうね。  博 士 : 逆じゃよ。  ピーター : 逆? なるほど、今度は短くした文字列を元に戻そうって問題ですか。ということは「?D-C'KOPUA」の 文字を、この表を使って「文字」から「符号」に置きかえるんですね......できましたよ。                 11111 00011 11101 00010 11110 01010 01110 01111 10100 00000   博 士 : うむ。次はこれじゃ。      ピーター : そうそう、こんな表もありましたね。これを逆に使うんだから「符号」から「文字」に置き換えればいい んですね。でも、最初は「11111」ですが表にありませんよ?  博 士 : そういうときは、もっと短くするか、後ろとつなげるかしてみるのだよ。  ピ ー タ ー : じゃあ短くして......あ、 「111」ならあります。じゃあ最初は「P」ですね。そうすると残りは「11」ですが、 これはぴったり合うのがないから次の「00011」から 1 文字借りて「110」にすればいいんですね。  博 士 : そうそう。つまり「E」だね。  ピ ー タ ー : それで残るのが「0011」なので、これも次から借りて「00111」にして「T」と......。全部できました。最 後の「0000」は捨てちゃえばいいんですよね?      博 士 : そうじゃ、よろしい。次はこれじゃ。                 ?D-C'?-C'-LMGZN?FNJKN- WEYN?P'QMRWLPZLKKTPOVRGDI   博 士 : さらにこれじゃ。                 ?P'QNPY?IXX?IXXK.BI -G?R'RPP'RPOVWDMW?SWUVG'-LCMGQ   博 士 : 仕上げにこうじゃ。                 ?P'QMDUEQ GADKOQ ?SWUVG'-LCMG?X?IGX,PUL.?UL.VNQQI   ピ ー タ ー : しっかし面倒だなあ。博士、今度は自分でプログラムを作って下さいよ。  ということで、博士のかわりに、上の文章を置き換えるプログラムを作成してください。

Incorrect submission (verdict: Wrong Answer):
#! python.exe
dic = {}
for idx, c in enumerate("ABCDEFGHIJKLMNOPQRSTUVWXYZ .,-'?"):
    dic[c] = str(format(idx,'b').zfill(5))


decode = {"101"      : " ", "0101"     : "C", "0110"     : "K", "00110" : "S",
          "000000"   : "'", "0001"     : "D", "00100"    : "L", "00111" : "T",
          "000011"   : ",", "110"      : "E", "10011001" : "M", "10011100" : "U",
          "10010001" : "-", "01001"    : "F", "10011110" : "N", "10011101" : "V",
          "010001"   : ".", "10011011" : "G", "00101"    : "O", "000010"   : "W",
          "000001"   : "?", "010000"   : "H", "111"      : "P", "10010010" : "X",
          "100101"   : "A", "0111"     : "I", "10011111" : "Q", "10010011" : "Y",
          "10011010" : "B", "10011000" : "J", "1000"     : "R", "10010000" : "Z"}
print(dic)
while True:
    try:
        line = input()
    except:
        break
    s = ""
    for c in line:
        s += dic[c]
    ans = ""
    while s.count("1") :
        for key in decode:
            n = len(key)
            if s[0:n] == key:
                ans += decode[key]
                s = s[n:]
                break
#        print(ans, s)
    print(ans)

Fixed, accepted submission:
#! python.exe
dic = {}
for idx, c in enumerate("ABCDEFGHIJKLMNOPQRSTUVWXYZ .,-'?"):
    dic[c] = str(format(idx,'b').zfill(5))

decode = {"101"      : " ", "0101"     : "C", "0110"     : "K", "00110"    : "S",
          "000000"   : "'", "0001"     : "D", "00100"    : "L", "00111"    : "T",
          "000011"   : ",", "110"      : "E", "10011001" : "M", "10011100" : "U",
          "10010001" : "-", "01001"    : "F", "10011110" : "N", "10011101" : "V",
          "010001"   : ".", "10011011" : "G", "00101"    : "O", "000010"   : "W",
          "000001"   : "?", "010000"   : "H", "111"      : "P", "10010010" : "X",
          "100101"   : "A", "0111"     : "I", "10011111" : "Q", "10010011" : "Y",
          "10011010" : "B", "10011000" : "J", "1000"     : "R", "10010000" : "Z"}
#print(dic)
while True:
    try:
        line = input()
    except:
        break
    s = ""
    for c in line:
        s += dic[c]
    ans = ""
    tmp = ""
    for c in s:
        tmp += c
        if tmp in decode:
            ans += decode[tmp]
            tmp = ''
#        print(ans, s)
    print(ans)