e390 - 許功蓋問題
題目描述
題目要求判斷輸入的字串是否為特定集合中的字串,該集合包含可能導致編譯器混淆的中文,因為這些字元的第二個字元編碼與反斜線 \ 相同。
解題思路
題目描述了“許功蓋問題”,即某些中文字元在某些編譯器中可能被誤解為轉義字符。解決方案是預先定義一個包含所有可能引起問題的字元的集合,然後對於每個輸入字串,檢查它是否在這個集合中。程式碼使用 map 儲存這些字元,然後使用 map::find 進行查找。
複雜度分析
- 時間複雜度: O(1)
- 空間複雜度: O(N),其中 N 是
map中儲存的字元數量。由於字元數量固定,可以視為 O(1)。
程式碼
#include <iostream>
#include <map>
using namespace std;
map<string, int> m = {{"﹏", 1}, {"兝", 1}, {"α", 1}, {"么", 1}, {"功", 1}, {"吒", 1}, {"吭", 1}, {"沔", 1}, {"坼", 1}, {"歿", 1}, {"俞", 1}, {"枯", 1}, {"苒", 1}, {"娉", 1}, {"珮", 1},{"豹", 1}, {"崤", 1}, {"淚", 1}, {"許", 1}, {"廄", 1}, {"琵", 1}, {"跚", 1}, {"愧", 1}, {"稞", 1}, {"鈾", 1}, {"暝", 1}, {"蓋", 1}, {"墦", 1}, {"穀", 1}, {"閱", 1},{"璞", 1}, {"餐", 1}, {"縷", 1}, {"擺", 1}, {"黠", 1}, {"孀", 1}, {"髏", 1}, {"躡", 1}, {"尐", 1}, {"佢", 1}, {"汻", 1}, {"岤", 1}, {"狖", 1}, {"垥", 1}, {"柦", 1},{"胐", 1}, {"娖", 1}, {"涂", 1}, {"罡", 1}, {"偅", 1}, {"惝", 1}, {"牾", 1}, {"莍", 1}, {"傜", 1}, {"揊", 1}, {"焮", 1}, {"茻", 1}, {"鄃", 1}, {"幋", 1}, {"滜", 1},{"綅", 1}, {"赨", 1}, {"塿", 1}, {"槙", 1}, {"箤", 1}, {"踊", 1}, {"嫹", 1}, {"潿", 1}, {"蔌", 1}, {"醆", 1}, {"嬞", 1}, {"獦", 1}, {"螏", 1}, {"餤", 1}, {"燡", 1},{"螰", 1}, {"駹", 1}, {"礒", 1}, {"鎪", 1}, {"瀙", 1}, {"酀", 1}, {"瀵", 1}, {"騱", 1}, {"酅", 1}, {"贕", 1}, {"鱋", 1}, {"鱭", 1}};
int main(){
string a;
while(cin >> a){
if(m.find(a)!=m.end())cout << "Yes\n";
else cout << "No\n";
}
}