Codeforces - Genetic-Sequence-Searching

本文最後更新於:2024年1月12日 下午

Codeforces - Genetic-Sequence-Searching

Genetic-Sequence-Searching.cpp

// Author : ysh
// 02/03/2023 Fri 22:13:57.53
// https://codeforces.com/gym/425267
#include<bits/stdc++.h>
using namespace std;
#ifdef LOCAL
#include<debug.h>
#else
#define debug(...);
#endif

deque<int> check(string a) {
    deque<int>f(a.size());
    int l = 0,r = 0;
    for(int i = 1,len = a.size();i<len;i++) {
        f[i] = max(0,min(r - i + 1,f[i - l]));
        while(i + f[i] < len && a[i + f[i]] == a[f[i]]) f[i]++;
        if(i + f[i] - 1 > r) l = i,r = i + f[i] - 1;
    }
    return f;
}
int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);

    string a,b;cin>>a>>b;
    int aa = a.size(),bb = b.size();
    auto f = check(b + " " + a);
    reverse(a.begin(),a.end());
    reverse(b.begin(),b.end());
    auto g = check(b + " " + a);
    int ans = 0;
    vector<int>aans;
    for(int i = 0;i<=bb;i++) f.pop_front(),g.pop_front();
    swap(f,g);
    for(int i = 0,len = aa - bb;i<=len;i++) {
        if(g.at(i) + f.at((aa - 1) - (i + bb - 1)) >= bb - 1) ans++,aans.push_back(i + 1);
    }
    cout<<ans<<"\n";
    for(int &i : aans) {
        cout<<i<<" ";
    }
    return 0;
}

Codeforces - Genetic-Sequence-Searching
http://mysh212.github.io/algosolution/Genetic-Sequence-Searching.cpp/
作者
ysh
發布於
2023年2月3日
更新於
2024年1月12日
許可協議