ColaPig @ 2024-08-18 21:07:03
千万别用memset进行clear,会TLE,我在这卡了一个多小时
顺带帖一下自己的代码,不是很好看别喷
#include<bits/stdc++.h>
using namespace std;
int nex[3000005][70],cnt,t,n,q;
char s[3000005];
int exist[3000005];
int getnum(char x){
if(x>='A'&&x<='Z')
return x-'A';
else if(x>='a'&&x<='z')
return x-'a'+26;
else
return x-'0'+52;
}
void insert(char* s){
int p=0;
int l=strlen(s);
for(int i=0;i<l;i++){
int c=getnum(s[i]);
if(!nex[p][c]) nex[p][c]=++cnt;
p=nex[p][c];
exist[p]++;
}
}
int find(char* s){
int l=strlen(s);
int p=0;
for(int i=0;i<l;i++){
int c=getnum(s[i]);
if(!nex[p][c]) return 0;
p=nex[p][c];
}
return exist[p];
}
int main(){
cin>>t;
while(t--){
for(int i=0;i<=cnt;i++)
for(int j=0;j<=122;j++)
nex[i][j]=0;
for(int i=0;i<=cnt;i++)
exist[i]=0;
cnt=0;
scanf("%d%d",&n,&q);
for(int i=1;i<=n;i++){
scanf("%s",s);
insert(s);
}
for(int i=1;i<=q;i++){
scanf("%s",s);
printf("%d\n",find(s));
}
}
}
by EityDawn @ 2024-08-18 21:14:24
@ColaPig 讨论区里还是不要贴AC代码为好
by mooktian @ 2024-10-10 11:11:04
@ColaPig 多组数据清零哪里为啥j要设成122,求指点,
by mooktian @ 2024-10-10 11:12:16
我是数组开到62,所以j设成62也AC了,所以我很好奇,为啥要用122???