Advertisement
KiK0S

bohr_2

Dec 4th, 2017
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.62 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. const int k = 26;
  6.  
  7. struct vert{
  8.     bool flag = 0;
  9.     int ans = 0;
  10.     vector<int> to;
  11.     vert(){
  12.         to.assign(k, -1);
  13.     }
  14. };
  15.  
  16. vector<vert> g;
  17.  
  18. int add(const string &s){
  19.     int v = 0;
  20.     for(int i = 0; i < s.size(); i++){
  21.         int to = s[i] - 'a';
  22.         if(g[v].to[to] == -1){
  23.             g[v].to[to] = g.size();
  24.             g.push_back(vert());
  25.         }
  26.         v = g[v].to[to];
  27.     }
  28.     g[v].flag = 1;
  29.     return v;
  30. }
  31.  
  32. bool find(const string &s1, const string &s2){
  33.     int v = 0;
  34.     for(int i = 0; i < s1.size(); i++){
  35.         int to = s1[i] - 'a';
  36.         if(g[v].to[to] == -1){
  37.             return false;
  38.         }
  39.         v = g[v].to[to];
  40.     }
  41.     int v1 = 0;
  42.     for(int i = 0; i < s2.size(); i++){
  43.         int to = s2[i] - 'a';
  44.         if(g[v1].to[to] == -1){
  45.             return false;
  46.         }
  47.         v1 = g[v1].to[to];
  48.     }
  49.     if(v1 == v) g[v].ans++;
  50. }
  51.  
  52. signed main(){
  53.     ios_base::sync_with_stdio(0);
  54.     cin.tie(0);
  55.     cout.tie(0);
  56.     g.push_back(vert());
  57.     int n, m;
  58.     cin >> n;
  59.     vector<string> q(n);
  60.     for(int i = 0; i < n; i++){
  61.         cin >> q[i];
  62.     }
  63.     cin >> m;
  64.     vector<int> id(m);
  65.     for(int i = 0; i < m; i++){
  66.         string s;
  67.         cin>>s;
  68.         id[i] = add(s);
  69.     }
  70.     for(int i = 0; i < n; i++){
  71.         int ans = 0;
  72.         for(int j = 1; j <= q[i].size(); j++){
  73.             find(q[i].substr(0, j), q[i].substr((int)q[i].size() - j, j));
  74.         }
  75.     }
  76.     for(int i = 0; i < m; i++){
  77.         cout<<g[id[i]].ans<<'\n';
  78.     }
  79.  
  80.     return 0;
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement