题意:求所给数在输入字符串的时候出现的次数,用hash映射,轻松。。
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int hash[1000005];
int a[50005];
char str[10];
int judge(char c)
{
if('a'<=c&&c<='c')
return 2;
if('d'<=c&&c<='f')
return 3;
if('g'<=c&&c<='i')
return 4;
if('j'<=c&&c<='l')
return 5;
if('m'<=c&&c<='o')
return 6;
if('p'<=c&&c<='s')
return 7;
if('t'<=c&&c<='v')
return 8;
if('w'<=c&&c<='z')
return 9;
}
int main()
{
int t,n,m;
scanf("%d",&t);
while (t--)
{
scanf("%d%d",&n,&m);
for (int i = 0; i < n; i++)
scanf("%d",&a[i]);
memset(hash,0,sizeof(hash));
for (int i = 1; i <= m; i++)
{
scanf("%s",str);
int len = strlen(str);
int sum = 0;
for (int i = 0; i < len; i++)
sum = sum * 10 + judge(str[i]);
hash[sum]++;
}
for (int i = 0; i < n; i++)
printf("%d\n",hash[a[i]]);
}
return 0;
}