Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- ifstream fin("adn.in");
- ofstream fout("adn.out");
- vector<int> preffix_function(const string &A) {
- vector<int> pi(A.size());
- int N = A.size() - 1;
- for(int i = 2, q = 0; i <= N; ++i) {
- while(q && A[q + 1] != A[i])
- q = pi[q];
- if(A[q + 1] == A[i])
- ++q;
- pi[i] = q;
- }
- return pi;
- }
- vector<int> pref;
- bool found(const string &A, const string &B) {
- int N = B.size() - 1, M = A.size() - 1;
- for(int i = 1, q = 0; i <= N; ++i) {
- while(q && A[q + 1] != B[i])
- q = pref[q];
- if(A[q + 1] == B[i])
- ++q;
- if(q == M)
- return true;
- }
- return false;
- }
- int main() {
- int N;
- fin >> N;
- vector<string> a(N), new_a;
- for(string &s : a) {
- fin >> s;
- s = ' ' + s;
- }
- for(int i = 0; i < N; ++i) {
- pref.clear();
- pref = preffix_function(a[i]);
- bool ap = false;
- for(int j = 0; j < N && !ap; ++j)
- if(i != j && a[j].size() >= a[i].size() && found(a[i], a[j]))
- ap = true;
- if(!ap)
- new_a.push_back(a[i]);
- }
- a = new_a;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement