锦姐姐作为魔法少女有很多魔法石,每个魔法石都有一个符文,符文是一个数字。
锦姐姐想知道她拥有某一种魔法石的数量。
输入
第一行输入一个数t,代表有t组数据
每组数据的第一行输入两个数n,q,代表n个魔法石,q次询问
接下来一行n个整数ai,表示每个魔法石的符文
接下来q行,每行一个数x,代表符文为x
数据范围:1<=t<=100,1<=n<=100000,1<=q<=1000,0<=ai<=100000,0<=x<=100000
输出
每组输出q行
每行输出符文为x的魔法石的个数
样例输入Copy
1 5 2 1 1 2 2 3 2 3
样例输出Copy
2 1
我的代码
#include<stdio.h>
int
a[100005];
int
main()
{
int
t;
scanf
(
"%d"
,&t);
while
(t--)
{
int
i,n,q,x;
scanf
(
"%d %d"
,&n,&q);
for
(i=0;i<n;i++)
scanf
(
"%d"
,&a[i]);
while
(q--)
{
int
temp=0;
scanf
(
"%d"
,&x);
for
(i=0;i<n;i++)
{
if
(a[i]==x)
temp+=1;
}
printf
(
"%d\n"
,temp);
}
}
return
0;
}
请问这种的该如何优化呢
我帮你改良了一下,试试我这个代码
#include<stdio.h>
#include<string.h>
int a[100001];
int main()
{
int t,i,n,q,x,y;
scanf("%d",&t);
while(t--)
{
memset(a,0,sizeof(a));
scanf("%d %d",&n,&q);
for(i=0;i<n;i++)
{
scanf("%d",&y);
a[y]++;
}
while(q--)
{
scanf("%d",&x);
printf("%d\n",a[x]);
}
}
return 0;
}
这道题应该用哈希最快。用一个数组存每个符文出现的次数。给楼上的大佬补充一下问题。
不一定所有a[i]都在n以内,所以保证装得下的话,数组a的长度最小应为100001。