1 条题解
-
0
思路
EOF多串总长40万,包含整串本身,沿失配链找全部前后缀长度后递增输出。
参考程序(C++11)
#include <bits/stdc++.h> using namespace std; vector<int> prefix(const string&s){vector<int>p(s.size());for(int i=1;i<(int)s.size();i++){int j=p[i-1];while(j&&s[i]!=s[j])j=p[j-1];if(s[i]==s[j])j++;p[i]=j;}return p;}int main(){ios::sync_with_stdio(false);cin.tie(nullptr);string s;while(cin>>s){auto p=prefix(s);vector<int>a;for(int k=s.size();k;k=p[k-1])a.push_back(k);reverse(a.begin(),a.end());for(int i=0;i<(int)a.size();i++)cout<<a[i]<<(i+1==(int)a.size()?'\n':' ');}}
- 1