只过了1和5,找不出来错误,求求了
查看原帖
只过了1和5,找不出来错误,求求了
1112952
Au_Gold楼主2024/6/6 23:46
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N = 5e4 + 5, B = 5e5 + 5, mod = 7;

ll n, m, cnt[B], idx,jing[B];
char ch[B][2], str[B];
ll len;

void insert()//建树
{
    ll p = 0;
    for (ll i = 1; i <= len; i++)
    {
        ll j = str[i] - '0';
        if (!ch[p][j])
            ch[p][j] = ++idx;
        p = ch[p][j];
        jing[p]++;//经过该节点字符串个数
    }
    cnt[p]++;//结尾
}

ll query()//查询
{
    ll ans = 0, p = 0;
    for (ll i = 1; i <= len; i++)
    {
        ll j = str[i] - '0';
        if (!ch[p][j])
            return ans;
        p = ch[p][j];
        ans += cnt[p];
    }

    return ans - cnt[p]+ jing[p];
}

int main()
{
    cin >> m >> n;
    while (m--)
    {
        cin >> len;
        for (ll i = 1; i <= len; i++)
        {
            cin >> str[i];
        }
        insert();
    }
    while (n--)
    {
        cin >> len;
        for (ll i = 1; i <= len; i++)
        {
            cin >> str[i];
        }

        cout << query() << endl;
    }

    return 0;
}
2024/6/6 23:46
加载中...