http://acm.hdu.edu.cn/showproblem.php?pid=4287
题目蛮简单的,开始没想到,就是把字符串转换为数字,然后与之对应的数字就加1,注意转换的时候数组要尽量开大。
#include<cstdio>
#include<cstring>
int num[2000005],a[5005];
int solve(char *s)
{
int len=strlen(s),i,ans=0;
for(i=0;i<len;i++)
{
ans*=10;
if(s[i]>='a'&&s[i]<='c')ans+=2;
else if(s[i]>='d'&&s[i]<='f')ans+=3;
else if(s[i]>='g'&&s[i]<='i')ans+=4;
else if(s[i]>='j'&&s[i]<='l')ans+=5;
else if(s[i]>='m'&&s[i]<='o')ans+=6;
else if(s[i]>='p'&&s[i]<='s')ans+=7;
else if(s[i]>='t'&&s[i]<='v')ans+=8;
else ans+=9;
}
return ans;
}
int main()
{
//freopen("a.txt","r",stdin);
int t,n,m,i;
char str[10];
scanf("%d",&t);
while(t--)
{
memset(num,0,sizeof(num));
scanf("%d%d",&n,&m);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<m;i++)
{
scanf("%s",str);
num[solve(str)]++;
//printf("%s\n",str);
}
for(i=0;i<n;i++)
{
printf("%d\n",num[a[i]]);
}
}
return 0;
}