大问题+小问题 请大佬帮忙
查看原帖
大问题+小问题 请大佬帮忙
49677
miserExist楼主2021/8/27 08:46

一个小问题,为什么把换行从cout换成puts就没效果了呢?

然后是11个too long的大问题,调到人傻

#include<bits/stdc++.h>
#include<unordered_set>
using namespace std;

const int N = 1e6;

int n,m;

vector<int> cnt[N];

int idx = 0;

unordered_set<string> S;


int son[N][35];

void insert(char c[],int k)
{
    int p = 0;
    int len = strlen(c);
    for(int i = 0; i < len; i ++)
    {
        int u = c[i] - 'a' + 1;
        if(!son[p][u])
        {
            son[p][u] = ++ idx;
        }
        p = son[p][u];
    }
    cnt[p].push_back(k);
}


void query(char c[],int flag)
{
    int p = 0;
    int len = strlen(c);
    for(int i = 0; i < len; i ++)
    {
        int u = c[i] - 'a' + 1;
        if(!son[p][u])
        {
            cout << "\n";
            return;
        }
        p = son[p][u];
    }
    for(int k = 0; k < cnt[p].size(); k ++)
    {
        cout << cnt[p][k];
        if(k != cnt[p].size() - 1) cout << " ";
        else cout << "\n";
    }
}

char c[N];



signed main()
{
    ios::sync_with_stdio(false);
    cin >> n;
    for(int i = 1; i <= n; i ++)
    {
        int len;
        cin >> len;
        S.clear();
        for(int j = 1; j <= len; j ++)
        {
            memset(c, 0, sizeof c);
            cin >> c;
            
            if(!S.count(c))
            {
                insert(c,i);
                S.insert(c);
            }
        }
    }
    cin >> m;
    for(int i = 1; i <= m; i ++)
    {
        memset(c, 0, sizeof c);
        cin >> c;
        query(c,i);
        
    }


    return 0;
}
2021/8/27 08:46
加载中...