NC22896. 命名那个数字
描述
在威斯康辛州牛大农场经营者之中,都习惯于请会计部门用连续数字给母牛打上烙印。
但是,母牛用手机时并没感到这个系统的便利,它们更喜欢用它们喜欢的名字来呼叫它们的同伴,而不是用像这个的语句"C'mon, #4734, get along."。
请写一个程序来帮助可怜的牧牛工将一只母牛的烙印编号翻译成一个可能的名字。
因为母牛们现在都有手机了,使用那标准的按键的排布来把收到从数目翻译到文字:( 除了为之外 "Q" 和 "Z")
2: A,B,C 5: J,K,L 8: T,U,V
3: D,E,F 6: M,N,O 9: W,X,Y
4: G,H,I 7: P,R,S
可接受的名字都被放在一个名字字典中,它包含一连串的少于 5,000个可接受的牛名字。 (所有
输入描述
第1行包含一个正整数n,表示字典单词的数量
第2行~第N+1行 一个仅含大写字母的的字符串
第N+2行 包含一个编号(长度可能从1到12)。
输出描述
以字典顺序输出一个有效名字的不负列表,一行一个名字。若无有效名字,请输出“NONE”
示例1
输入:
3 GREG GGGG ABCD 4734
输出:
GREG
C++ 解法, 执行用时: 4ms, 内存消耗: 548K, 提交时间: 2021-08-07 16:50:21
#include<bits/stdc++.h> using namespace std; string s[5010],p; int f[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}; int main(){ int n; bool flag=true; cin>>n; for(int i=1;i<=n;i++) cin>>s[i]; cin>>p; for(int i=1;i<=n;i++){ bool z=true; if(s[i].size()!=p.size())continue; for(int j=0;j<s[i].size();j++) if(f[s[i][j]-'A']!=p[j]-'0'){ z=false; break; } if(z){ flag=false; cout<<s[i]<<"\n"; } } if(flag)cout<<"NONE"<<"\n"; return 0; }
Python3 解法, 执行用时: 65ms, 内存消耗: 6876K, 提交时间: 2021-05-21 14:06:07
n = int(input()) d = [] for i in range(n): d.append(input()) d.sort() k = input() m = '2223334445556667 77888999 ' sign = 1 for i in d: if len(i) != len(k): continue res = '' for j in i: res += m[ord(j) - 65] if res == k: sign = 0 print(i) if sign: print("NONE")