經典 AD-hoc 題:給定數字串(2-9),按電話鍵盤映射(2:ABC, 3:DEF, 4:GHI, 5:JKL, 6:MNO, 7:PRS, 8:TUV, 9:WXY),從字典中找出映射後與輸入數字完全匹配的單詞。注意 Q 和 Z 無映射。
int map[26] = {
2,2,2, 3,3,3, 4,4,4, 5,5,5, 6,6,6, 7,0,7,7, 8,8,8, 9,9,9, 0
// A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
};
// Q 和 Z 映射為 0(無效),遇到跳過
> word) {
if(word[0] == 'Z') break; // 字典結束標記
dict.push_back(word);
}
string target; fin >> target;
int map[26] = {2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,0,7,7,8,8,8,9,9,9,0};
bool found = false;
for(string& w : dict) {
string num = "";
for(char c : w) {
int m = map[c - 'A'];
if(m == 0) { num = ""; break; } // 含 Q/Z 無效
num += char('0' + m);
}
if(num == target) {
fout << w << '\n';
found = true;
}
}
if(!found) fout << "NONE\n";
return 0;
}
預處理 O(總字符數),查詢 O(字典大小 × 單詞長度),完全在限制內。
本題考察字符串映射與字典查找,預處理+線性掃描即可,無需複雜數據結構。注意 Q/Z 的特殊處理和字典結束標記。