@[Jackson_Miller](/user/754673) 你查询的时候下一个没有了应该返回的是res,因为当前都没有了,当前的sum不是表示的有多少串经过这里吗,你这里应该是返回之前以当前串为前缀的数量。
by Aisaka_Taiga @ 2023-08-11 22:15:49
@[Aisaka_Taiga](/user/526519) 谢谢大佬,AC力,此贴结,给你关注了
by Jackson_Miller @ 2023-08-12 08:04:35
我也是7分,咋回事呀???我没看懂,感觉咱俩写的不一样
```cpp
#include <bits/stdc++.h>
using namespace std;
const int N=500010;
int n,m,nn;
int trie[N][2],l,end[N],a,ans[N];
int main()
{
freopen("P2922_2.in","r",stdin);
freopen("hehe.txt","w",stdout);
scanf("%d%d",&n,&m);
for (int i=1;i<=n;i++) {
scanf("%d",&nn);
int p=0;
for (int j=1;j<=nn;j++) {
scanf("%d",&a);
if (!trie[p][a]) trie[p][a]=++l;
p=trie[p][a];
// cout<<p<<endl;
ans[p]++;
}
end[p]++;
}
// for (int i=1;i<=40;i++) cout<<end[i]<<" ";
// cout<<endl;
// for (int i=1;i<=40;i++) cout<<ans[i]<<" ";
// cout<<endl;
for (int i=1;i<=m;i++) {
scanf("%d",&nn);
int p=0,s=0;
for (int j=1;j<=nn;j++) {
scanf("%d",&a);
s+=end[p];
if (!trie[p][a]) {
for (int k=j+1;k<=nn;k++)
scanf("%d",&a);
s-=end[p];
break;
}
p=trie[p][a];
// cout<<p<<endl;
}
s+=ans[p];
printf("%d\n",s);
}
return 0;
}
```
by csq_pig @ 2024-01-29 21:41:49
好像思路差不多啊,所以我这个为啥7分呢
by csq_pig @ 2024-01-29 21:46:09