MnZn求助,15pts除了#1、#5全部RE,调不出来
查看原帖
MnZn求助,15pts除了#1、#5全部RE,调不出来
470960
Yellow_and_Strong楼主2023/5/12 15:08

rt

#include <bits/stdc++.h>

using namespace std;

const int MAX = 5e5 + 50;

inline int read()
{
    int x = 0; char ch = getchar();
    while (!isdigit(ch)) ch = getchar();
    while (isdigit(ch)) x = (x << 1) + (x << 3) + (ch xor 48), ch = getchar();
    return x;
}
inline void write (int x)
{
    if (x > 9) write(x / 10);
    putchar (x % 10 + 48);
}

int m, n;
int tot, root; int sum[MAX << 1], _end[MAX << 1]; int ch[MAX << 1][2]; int ans;
inline int _new() { return (++ tot); }
void insert (int &cur, int s[], int now, int len)
{
    if (!cur) cur = _new();
    ++ sum[cur];
    if (now == len) return (void)(++ _end[cur]);
    insert(ch[cur][s[now + 1]], s, now + 1, len);
}
void query (int cur, int s[], int now, int len)
{
    ans += _end[cur];
    if (now == len) return (void)(ans -= _end[cur], ans += sum[cur]);
    if (ch[cur][s[now + 1]] == 0) return;
    query(ch[cur][s[now + 1]], s, now + 1, len);
}
inline void output() { write(ans), putchar('\n'); }
inline void work()
{
    m = read(), n = read();
    for (register int i = 1; i <= m; ++ i)
    {
        int len = read(); int s[MAX];
        for (register int i = 1; i <= len; ++ i) cin >> s[i];
        insert (root, s, 0, len);
    }
    for (register int i = 1; i <= n; ++ i)
    {
        ans = 0;
        int len = read(); int s[MAX];
        for (register int i = 1; i <= len; ++ i) cin >> s[i];
        query (root, s, 0, len);
        output();
    }
}

int main()
{
    work();
    return 0;
}
2023/5/12 15:08
加载中...