7分求调教

P2922 [USACO08DEC] Secret Message G

@[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


|