求助(WA1:Too long on line 2)
查看原帖
求助(WA1:Too long on line 2)
661707
Tiwwp8n24楼主2024/7/15 14:01
#include <bits/stdc++.h>

#define endl '\n'

using namespace std;

typedef long long LL;
typedef pair<int, int> PII;

const int N = 1e6 + 10, INF = 0x3f3f3f3f, MOD = 1e9 + 7;

int n, t, k, tot = 1, lst = 1;
int tr[N][26], len[N], dad[N], cnt[N];
LL f[N];
vector<int> e[N];

void extend(int c)
{
    int cur = ++ tot, p = lst;
    len[cur] = len[lst] + 1, cnt[cur] = 1;
    for( ; p && !tr[p][c]; p = dad[p]) tr[p][c] = cur;

    if(!p) dad[cur] = 1;
    else
    {
        int q = tr[p][c];
        if(len[p] + 1 == len[q]) dad[cur] = q;
        else
        {
            int clone = ++ tot;
            len[clone] = len[p] + 1, dad[clone] = dad[q], dad[q] = clone, dad[cur] = clone;
            for( ; p && tr[p][c] == q; p = dad[p]) tr[p][c] = clone;
            memcpy(tr[clone], tr[q], sizeof tr[q]);
        }
    }

    lst = cur;
}

void dfs1(int u)
{
    for(int v : e[u])
    {
        dfs1(v);
        cnt[u] += cnt[v];
    }
}

void dfs2(int u)
{
    if(f[u]) return;

    if(!t) cnt[u] = 1;
    if(u != 1) f[u] = cnt[u];
    for(int i = 0; i < 26; i ++)
    {
        int v = tr[u][i];
        if(v)
        {
            dfs2(v);
            f[u] += f[v];
        }
    }
}

void dfs3(int u, int k)
{
    if(!k) 
    {
        cout << endl;
        return;
    }

    for(int i = 0; i < 26; i ++) 
    {
        int v = tr[u][i];
        if(v)
        {
            if(k > f[v]) k -= f[v];
            else
            {
                cout << (char)('a' + i);
                dfs3(v, k - cnt[v]);
                return;
            }
        }
    }
}

void solve()
{
    string s;
    cin >> s >> t >> k;

    for(auto c : s) extend(c - 'a');
    for(int i = 1; i <= tot; i ++) e[dad[i]].push_back(i);

    dfs1(1);
    dfs2(1);

    if(k > f[1]) cout << -1 << endl;
    else dfs3(1, k);
}

int main()
{
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);

    int T = 1;
    // cin >> T;
    while(T --) solve();

    return 0;
}
2024/7/15 14:01
加载中...