2018/6/10 特殊編碼

2023.1.4 PM 03:00 by CBJ

來源 : https://zerojudge.tw/ShowProblem?problemid=e283
出題者 : 2018年6月APCS
標籤 : 建表查表、字串拼接、IO加速
難易度 : 1
解題想法 : 
首先利用C++ map或Python dictionary建出一個字串對字串的表(字串index -> 字串value),並分別填入題目定義好的對應關係。

再來只要每輸入一個字串就查出其對應的值並將其拼接,最後一次輸出(較有效率)。

小提醒 : 
1. 記得做IO優化
(C++: 詳見程式碼define fastio的定義內容, Python則需從sys套件中引入stdin並使用stdin.readline().rstrip()代替input()使用)

2. C++ getline
輸入中包含空格,所以不能使用cin讀,但由於使用getline之前有先輸入一個n,如果直接使用getline會讀到輸入n時按下的換行字元,因此在讀完n後,必須先呼叫一個getline把他讀掉再來讀正式內容。
//C++ language

#include<iostream>
#include<map>
#define fastio ios_base::sync_with_stdio(false);cin.tie(0)
using namespace std;
map<string,string>mp;
void init(){
    mp["0 1 0 1"]="A"; mp["0 1 1 1"]="B"; mp["0 0 1 0"]="C";
    mp["1 1 0 1"]="D"; mp["1 0 0 0"]="E"; mp["1 1 0 0"]="F";
}
int main(){
    
    fastio;
    init();
    
    int N;
    while(cin>>N){
        string ans,ignore;
        getline(cin,ignore);
        while(N--){
            string s;
            getline(cin,s);
            ans+=mp[s];
        }
        cout<<ans<<"\n";
    }
    return 0;
}
## Python language

from sys import stdin
d={'0 1 0 1':'A','0 1 1 1':'B','0 0 1 0':'C','1 1 0 1':'D','1 0 0 0':'E','1 1 0 0':'F'}
for read in stdin:
    read=int(read)
    ans=''
    for i in range(read):
        s=stdin.readline().rstrip()
        ans+=d[s]
    print(ans)

相關文章