大佬求助为啥全WA
查看原帖
大佬求助为啥全WA
573945
Ge_Yu_Han楼主2023/4/29 00:23
#include <iostream> 
#include <vector>
#include <string>
#include <string.h>
#include <set>
#include <map>
#include <unordered_map>
#include <stack>
#include <queue>
#include <deque>
#include <algorithm>
#include <cmath>
#include <functional>

using namespace std;

typedef long long ll;
typedef unsigned long long ull;
#define INF 0x3f3f3f3f
#define N 30005
#define Cn cout << '\n' 
#define IOS ios::sync_with_stdio(0),cin.tie(nullptr)

int cnt, t[500005][27];
vector<int> ans[500005];
bool judge[500005];

void insert (string s, int w) {
    int cur = 1;
    for (int i = 0; i < s.size(); i++) {
        if (!t[cur][s[i] - 'a']) 
            t[cur][s[i] - 'a'] = ++cnt;
        cur = t[cur][s[i] - 'a'];
    }
    ans[cur].push_back(w);
    judge[cur] = true;
}

int find (string s) {
    int cur = 1;
    for (int i = 0; i < s.size(); i++) {
        if (!t[cur][s[i] - 'a']) return -1;
        cur = t[cur][s[i] - 'a'];
    }
    return (judge[cur] ? cur : -1);
}

int main() 
{
    IOS;

    int n; cin >> n;
    for (int i = 1; i <= n; i++) {
        int x; cin >> x;
        string s;
        for (int j = 0; j < x; j++) {
            cin >> s;
            insert (s, i);
        }
    }
    int m; cin >> m;
    while (m--) {
        string s; cin >> s;
        int d = find (s);
        if (d == -1) cout << "\n";
        else {
            auto it = unique(ans[d].begin(), ans[d].end());
            ans[d].erase(it, ans[d].end());
            for (int i = 0; i < ans[d].size(); i++) {
                cout << ans[d][i] << (i == ans[d].size() - 1 ? '\n' : ' ');
            }
        }
    }
    return 0;
}
2023/4/29 00:23
加载中...