题目:
问给出的数字在字符串中出现的次数(有映射关系的)
分析:
直接map<int,int> 记录给出的数,然后对于每个字符串,可以先转换成一个整数(长度小于7),然后若该数在map中,
这更新相应的计数器即可
若代码有错,请指出^^
6726825 | 2012-09-09 17:10:30 | Accepted | 4287 | 93MS | 688K | 839 B | G++ |
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <map> 5 6 using namespace std; 7 8 const int X = 5005; 9 10 int n,m; 11 int use[X]; 12 13 int a[] = {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}; 14 15 map<int,int> ma; 16 char s[10]; 17 18 int main(){ 19 freopen("sum.in","r",stdin); 20 int ncase; 21 scanf("%d",&ncase); 22 while(ncase--){ 23 int x; 24 scanf("%d%d",&n,&m); 25 ma.clear(); 26 memset(use,0,sizeof(use)); 27 for(int i=1;i<=n;i++){ 28 scanf("%d",&x); 29 ma[x] = i; 30 } 31 int temp; 32 for(int i=0;i<m;i++){ 33 scanf("%s",s); 34 temp = 0; 35 for(int j=0;s[j];j++) 36 temp = temp*10+a[s[j]-'a']; 37 use[ma[temp]]++; 38 } 39 for(int i=1;i<=n;i++) 40 printf("%d\n",use[i]); 41 } 42 return 0; 43 }