hdu 4287 Intelligent IME
2015-12-03 21:21
585 查看
[align=left]Problem Description[/align]
We all use cell phone today. And we must be familiar with the intelligent English input method on the cell phone. To be specific, the number buttons may correspond to some English letters respectively, as shown below:
2 : a, b, c 3 : d, e, f 4 : g, h, i 5 : j, k, l 6 : m, n, o
7 : p, q, r, s 8 : t, u, v 9 : w, x, y, z
When we want to input the word “wing”, we press the button 9, 4, 6, 4, then the input method will choose from an embedded dictionary, all words matching the input number sequence, such as “wing”, “whoi”, “zhog”. Here comes our question, given a dictionary, how many words in it match some input number sequences?
[align=left]Input[/align]
First is an integer T, indicating the number of test cases. Then T block follows, each of which is formatted like this:
Two integer N (1 <= N <= 5000), M (1 <= M <= 5000), indicating the number of input number sequences and the number of words in the dictionary, respectively. Then comes N lines, each line contains a number sequence, consisting of no more than 6 digits. Then comes M lines, each line contains a letter string, consisting of no more than 6 lower letters. It is guaranteed that there are neither duplicated number sequences nor duplicated words.
[align=left]Output[/align]
For each input block, output N integers, indicating how many words in the dictionary match the corresponding number sequence, each integer per line.
[align=left]Sample Input[/align]
1
3 5
46
64448
74
go
in
night
might
gn
[align=left]Sample Output[/align]
3
2
0
[align=left]Source[/align]
2012 ACM/ICPC Asia Regional Tianjin Online
题解:手机九宫格,字母与对应的数字.... 自己过了案例,但是还是WA,之后才知道自己写的代码不能判断相等的情况....srO
WA代码:
View Code
We all use cell phone today. And we must be familiar with the intelligent English input method on the cell phone. To be specific, the number buttons may correspond to some English letters respectively, as shown below:
2 : a, b, c 3 : d, e, f 4 : g, h, i 5 : j, k, l 6 : m, n, o
7 : p, q, r, s 8 : t, u, v 9 : w, x, y, z
When we want to input the word “wing”, we press the button 9, 4, 6, 4, then the input method will choose from an embedded dictionary, all words matching the input number sequence, such as “wing”, “whoi”, “zhog”. Here comes our question, given a dictionary, how many words in it match some input number sequences?
[align=left]Input[/align]
First is an integer T, indicating the number of test cases. Then T block follows, each of which is formatted like this:
Two integer N (1 <= N <= 5000), M (1 <= M <= 5000), indicating the number of input number sequences and the number of words in the dictionary, respectively. Then comes N lines, each line contains a number sequence, consisting of no more than 6 digits. Then comes M lines, each line contains a letter string, consisting of no more than 6 lower letters. It is guaranteed that there are neither duplicated number sequences nor duplicated words.
[align=left]Output[/align]
For each input block, output N integers, indicating how many words in the dictionary match the corresponding number sequence, each integer per line.
[align=left]Sample Input[/align]
1
3 5
46
64448
74
go
in
night
might
gn
[align=left]Sample Output[/align]
3
2
0
[align=left]Source[/align]
2012 ACM/ICPC Asia Regional Tianjin Online
题解:手机九宫格,字母与对应的数字.... 自己过了案例,但是还是WA,之后才知道自己写的代码不能判断相等的情况....srO
WA代码:
#include <iostream> #include <algorithm> #include <string> #include <stdio.h> #include <cstring> using namespace std; #define Max 13 struct dot { dot *next[Max]; int flag; } ; dot *newnode() { dot *temp=new dot; temp->flag=0; for(int i=0;i<Max;i++) temp->next[i]=NULL; return temp; } void tree(char *st,dot *root) { dot *p=root; int id=0; int len=strlen(st); for(int i=0;i<len;i++) { if(st[i]>='a'&&st[i]<='c') id=2; else if(st[i]>='d'&&st[i]<='f') id=3; else if(st[i]>='g'&&st[i]<='i') id=4; else if(st[i]>='j'&&st[i]<='l') id=5; else if(st[i]>='m'&&st[i]<='o') id=6; else if(st[i]>='p'&&st[i]<='s') id=7; else if(st[i]>='t'&&st[i]<='v') id=8; else if(st[i]>='w'&&st[i]<='z') id=9; if(p->next[id]==NULL) p->next[id]=newnode(); p=p->next[id]; } p->flag++; } int find(char *st,dot *root) { int id; dot *p=root; for(int i=0;i<strlen(st);i++) { id=st[i]-'0'; if(p->next[id]==NULL) return 0; p=p->next[id]; } return p->flag; } void del(dot *t) { if(t==NULL) return ; for(int i=0;i<Max;i++) if(t->next[i]==NULL) del(t->next[i]); delete t; } int main() { int n,m,i,j,k,t; cin>>t; char s[5005][20],st[30]; while(t--) { cin>>n>>m; dot *root=new dot; root=newnode(); for(i=0;i<n;i++) cin>>s[i]; while(m--) { cin>>st; tree(st,root); } for(i=0;i<n;i++) cout<<find(s[i],root)<<endl; del(root); } return 0; }
View Code
相关文章推荐
- 南大软院大神养成计划--网站
- 同步集合
- noip2015pj t4
- scanf
- PHP基础--变量
- badusb_payload(一)添加管理员用户
- 栈的数组实现
- java设计模式(五)--策略模式
- Linux内核同步机制之(七):RCU基础
- 将WAR包部署在tomcat根路径
- badusb(一)环境配置
- Servlet过滤器和监听器(转)
- 12.03自动机实验
- Android使用HttpClient时出现的 java.lang.NullPointerException提示
- Android 手势控制解锁,滑动图片,照相,音乐切换,收音机换台,短信界面打电话
- Codeforces 602B Approximating a Constant Range(RMQ)
- win7通过win10的ISO镜像免费升级正版win10(组图)
- java---一元二次方程练习
- JS的__proto__与prototype
- String使用经验