e283 - APCS 類似題 - 小崴的特殊編碼
題目描述
題目要求將經過特殊編碼的二元序列轉換回原始字元 (A~F)。輸入包含多組測試資料,每組資料首先輸入一個整數 N,代表接下來有 N 行二元序列。程式需要讀取這些二元序列,並根據題目提供的對照表,輸出對應的原始字串。
解題思路
題目給定了二元序列與字元的對應關係,因此解題思路是:
- 讀取每組測試資料的 N 值。
- 迴圈 N 次,每次讀取一個二元序列。
- 根據二元序列,判斷對應的字元,並輸出。
- 處理多組測試資料,直到輸入結束 (EOF)。 程式碼中使用了大量的 if-else 條件判斷,直接對應題目中給定的編碼表。
複雜度分析
- 時間複雜度: O(N * M),其中 N 是輸入的字串數量,M 是每個字串的長度 (固定為 4)。由於 M 是常數,因此可以簡化為 O(N)。
- 空間複雜度: O(1),程式只使用了固定大小的變數,沒有使用額外的資料結構來儲存輸入資料。
程式碼
#include <iostream>
#include <string>
using namespace std;
int main(){
std::ios::sync_with_stdio(false);
cin.tie(NULL);
int a;
while(cin >> a){
for(;a>0;a--){
char c[4];
for(int i=0;i<4;i++)
cin >> c[i];
if(c[0]=='0'&&c[0]==c[2]&&c[1]=='1'&&c[1]==c[3])
cout << 'A';
else if(c[0]=='0'&&c[0]!=c[2]&&c[1]=='1'&&c[1]==c[3])
cout << 'B';
else if(c[0]=='0'&&c[0]!=c[2]&&c[1]=='0'&&c[1]==c[3])
cout << 'C';
else if(c[0]=='1'&&c[0]!=c[2]&&c[1]=='1'&&c[1]==c[3])
cout << 'D';
else if(c[0]=='1'&&c[1]==c[2]&&c[2]==c[3]&&c[3]=='0')
cout << 'E';
else if(c[0]=='1'&&c[0]==c[1]&&c[2]=='0'&&c[2]==c[3])
cout << 'F';
}
cout << endl;
}
}