题意:输入n个数字编码,m个单词,每个数字可以表示一定的字母,m个单词组成一个字典,求每一个数字编码在这个字典中可以表示几个单词。 题目链接:Intelligent IME 解题思路: 1.将数字编码转化成单词,但仔细一想,有很多组合,要写好多循环,判断,(当然也是可能过的)。 2.将单词转化为数字,用map双重映射数字编码以及他出现的次数,每次把单词转化的数字编码的map值++即可。 总结: 想法相当巧妙~然而我当时却没想到 代码: #include #include #include #include #include using namespace std; string s; string num[5020]; map mp; int st[30]={2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,7,7,8,8,8,9,9,9,9};//好想法就在这,让每个字母对应唯一的字符 int main() { int T,i,j,n,m; cin>>T; while(T--){ cin>>n>>m; mp.clear(); for(i=0;i >num[i]; } for(i=0;i >s; for(j=0;j<(int) s.length();j++){ s[j]=st[s[j]-'a']+'0';//将字符串转化为其相应的数字编码 } s[j]='\0',mp[s]++;//该数字编码的单词出现过一次,计数 } for(i=0;i