P2922 [USACO08DEC] Secret Message G

点击查看代码
#include<bits/stdc++.h>
using namespace std;

const int N=5e5+10;
int tr[N][2],pass_cnt[N],end_cnt[N],idx;
int m,n;

void insert(const vector<int>& seq)
{
    int p=0;
    for(int x:seq){
        int u=x;
        if(!tr[p][u]) tr[p][u]=++idx;
        p=tr[p][u];
        pass_cnt[p]++;
    }
    end_cnt[p]++;
}

int query(const vector<int>& seq)
{
    int p=0,ans=0;
    for(int x:seq){
        int u=x;
        if(!tr[p][u]) return ans;
        p=tr[p][u];
        ans+=end_cnt[p];
    }
    ans+=pass_cnt[p]-end_cnt[p];
    return ans;
}

int main()
{
    ios::sync_with_stdio(0),cin.tie(0);
    cin>>m>>n;
    while(m--){
        int len;
        cin>>len;
        vector<int> seq(len);
        for(int j=0;j<len;j++) cin>>seq[j];
        insert(seq);
    }
    while(n--){
        int len;
        cin>>len;
        vector<int> seq(len);
        for(int j=0;j<len;j++) cin>>seq[j];
        cout<<query(seq)<<"\n";
    }

    return 0;
}
posted @ 2026-03-02 22:57  AnoSky  阅读(0)  评论(0)    收藏  举报