寝癖頭の解法

学習中の覚え書きを投稿、更新していきます。

Aizu Online Judge in C++ #Volume1 - 0111 : Doctor's Memorable Codes

Aizu Online Judge(AOJ)の過去問から、その提出コードの解答例です。

・問題 "Doctor's Memorable Codes"
https://onlinejudge.u-aizu.ac.jp/problems/0111
・博士の暗号
僕が作成、提出したコードは、以下のとおりです。

・Aizu Online Judge in C++ #Volume1 - 0111 : Doctor's Memorable Codes
/*
Aizu Online Judge in C++ #Volume1 - 0111 : Doctor's Memorable Codes
 https://onlinejudge.u-aizu.ac.jp/problems/0111
 提出コードの解答例
 https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
int main(void){
    for(string s;getline(cin,s);){
        string st;
        for(ll i=0;i<s.size();i++){
            string str="ABCDEFGHIJKLMNOPQRSTUVWXYZ .,-'?";
            ll num=str.find(s[i]);
            for(ll j=4;j>=0;j--){
                st+=!!(num&1<<j)+'0';
            }
        }
        string t;
        for(ll i=0;i<st.size();i++){
            t+=st[i];
            string v[]={"101","000000","000011","10010001","010001","000001","100101","10011010","0101","0001","110","01001","10011011","010000","0111","10011000","0110","00100","10011001","10011110","00101","111","10011111","1000","00110","00111","10011100","10011101","000010","10010010","10010011","10010000"};
            const char *c=" ',-.?ABCDEFGHIJKLMNOPQRSTUVWXYZ";
            ll num=find(v,v+32,t)-v;
            if(num!=32){
                cout<<c[num];
                t.clear();
            }
        }
        cout<<endl;
    }
    return 0;
}

設問の出典は、プログラミング問題のオンライン採点システム「Aizu Online Judge(AOJ)」です。
http://judge.u-aizu.ac.jp/onlinejudge/