为什么会MLE
查看原帖
为什么会MLE
1033990
lw393楼主2024/9/24 22:46
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 2e4 + 5, M = 2e5 + 5;

struct node{
    int vis[26];
    int end;
}trie[N];
int cnt = 0;

void insert(string s){
    int p = 0;
    for(int i = 0; i < s.length(); i++){
        if(!trie[p].vis[s[i] - 'A']) trie[p].vis[s[i] - 'A'] = ++cnt;
        p = trie[p].vis[s[i] - 'A'];
    }
    trie[p].end = 1;
}

bool f[M];
bool vis[M];

void dfs(string s, int pos){
    if(pos == s.length()) return;
    if(vis[pos]) return;
    vis[pos] = 1;
    int p = 0;
    for(int i = pos; i < s.length(); i++){
        if(trie[p].vis[s[i] - 'A']) p = trie[p].vis[s[i] - 'A'];
        else return;
        if(trie[p].end){
            f[i + 1] = 1;
            dfs(s, i + 1);
        }
    }
}

void solve(){
    string s;
    while(cin >> s){
        if(s == ".") break;
        insert(s);
    }
    string temp;
    s.clear();
    while(cin >> temp) s += temp;
    dfs(s, 0);
    for(int i = s.length(); i >= 1; i--){
        if(f[i]){
            cout << i << '\n';
            return;
        }
    }
    cout << 0;
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int t = 1;
    //cin >> t;
    while(t--){
        solve();
    }
    return 0;
}
2024/9/24 22:46
加载中...