由于最长只有六个字母,而且都只是对应1到9的数字,因而最大只是999999,完全可以水过。
#include<cstdio>
#include<cstring>
int num[1000000];
int ts(char str[])
{
int len = strlen(str);
int ret = 0;
for(int i = 0; i < len; i++)
{
if(str[i] <= 'c') ret += 2;
else if(str[i] <= 'f') ret += 3;
else if(str[i] <= 'i') ret += 4;
else if(str[i] <= 'l') ret += 5;
else if(str[i] <= 'o') ret += 6;
else if(str[i] <= 's') ret += 7;
else if(str[i] <= 'v') ret += 8;
else if(str[i] <= 'z') ret += 9;
ret *= 10;
}
ret /= 10;
return ret;
}
int first[5010];
int main()
{
int n, m;
int t;
scanf("%d", &t);
while(t--)
{
scanf("%d%d", &n, &m);
memset(num, 0, sizeof(num));
memset(first, 0, sizeof(first));
int top = 0;
int i, j;
int nnn;
for(i = 0; i < n; i++)
{
scanf("%d", &nnn);
first[top++] = nnn;
}
char str[8];
int len;
int ans = 0;
for(i = 0; i < m; i++)
{
scanf("%s", str);
int tmp = ts(str);
num[tmp] ++;
}
for(i = 0; i < top; i++)
printf("%d\n", num[first[i]]);
}
return 0;
}