Advertisement
Alex_tz307

ADN - not finished

Feb 24th, 2021
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.23 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. ifstream fin("adn.in");
  6. ofstream fout("adn.out");
  7.  
  8. vector<int> preffix_function(const string &A) {
  9.     vector<int> pi(A.size());
  10.     int N = A.size() - 1;
  11.     for(int i = 2, q = 0; i <= N; ++i) {
  12.         while(q && A[q + 1] != A[i])
  13.             q = pi[q];
  14.         if(A[q + 1] == A[i])
  15.             ++q;
  16.         pi[i] = q;
  17.     }
  18.     return pi;
  19. }
  20.  
  21. vector<int> pref;
  22.  
  23. bool found(const string &A, const string &B) {
  24.     int N = B.size() - 1, M = A.size() - 1;
  25.     for(int i = 1, q = 0; i <= N; ++i) {
  26.         while(q && A[q + 1] != B[i])
  27.             q = pref[q];
  28.         if(A[q + 1] == B[i])
  29.             ++q;
  30.         if(q == M)
  31.             return true;
  32.     }
  33.     return false;
  34. }
  35.  
  36. int main() {
  37.     int N;
  38.     fin >> N;
  39.     vector<string> a(N), new_a;
  40.     for(string &s : a) {
  41.         fin >> s;
  42.         s = ' ' + s;
  43.     }
  44.     for(int i = 0; i < N; ++i) {
  45.         pref.clear();
  46.         pref = preffix_function(a[i]);
  47.         bool ap = false;
  48.         for(int j = 0; j < N && !ap; ++j)
  49.             if(i != j && a[j].size() >= a[i].size() && found(a[i], a[j]))
  50.                 ap = true;
  51.         if(!ap)
  52.             new_a.push_back(a[i]);
  53.     }
  54.     a = new_a;
  55.  
  56. }
  57.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement